java - 在 neo4j 中插入 1 MB 的图像在检索时返回不同的大小 (536 KB)

标签 java database neo4j

我正在尝试使用以下代码在 neo4j 中插入一个 1 MB 的图像:

 File fnew = new File("C:\\Users\\myimage.jpg");
 BufferedImage originalImage = ImageIO.read(fnew);
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 baos.flus();
 ImageIO.write(originalImage, "jpg", baos);
 return baos.toByteArray();

然后我使用以下方法插入这个字节数组:

 user.setProperty("photo", photo);

一切顺利。当我尝试使用以下方法选择照片时,它在我的硬盘上将其写入为 536KB 而不是 1 MB 的原始大小。

 byte[] imageInByte = (byte[]) user.getProperty("photo");
 InputStream in = new ByteArrayInputStream(imageInByte);
 BufferedImage bImageFromConvert = ImageIO.read(in);
 ImageIO.write(bImageFromConvert, "jpg", new File("C:\\newimage.jpg"));

现在奇怪的是:我可以看到图像,打开它,分辨率相同,但我没有看到质量方面的任何差异。看起来它是压缩的。

为什么会这样?

最佳答案

通过 ImageIO 保存 jpg 图像会导致 jpg 有损压缩(我相信质量默认为 70%)。您可以 a) 在写入文件时更改图像质量(请参阅 Setting jpg compression level with ImageIO in Java )或 b) 如果您实际上不需要 BufferedImage,只需将字节从文件读/写到数据库。

关于java - 在 neo4j 中插入 1 MB 的图像在检索时返回不同的大小 (536 KB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421987/

相关文章:

php - 用于处理 session 的不同数据库...我做的正确吗?

python - 无法在 COALESCE pypher 中设置列​​表类型值

python - neo4j:返回最长匹配补丁上的所有节点

java - 强制为 crontab 作业创建 tty

java - 如何比较两个字符串的值?

java - 无法刷新 jface 表查看器

database - 不相交和重叠的设计约束

java - 如何使用 AndroidJavaObject.Call 将参数传递给 Java?

java.sql.SQLException : No suitable driver found for jdbc:mysql://localhost:3306/database

neo4j - SDN 3.3.0 还是 SDN 4.0M1?