我正在尝试使用以下代码在 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/