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

Inserting 1 MB image in neo4j returns a different size (536 KB) when retrieved

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

一切顺利。当我尝试 select 照片时,使用以下方法,它在我的硬盘上写入 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,只需 read/write 从文件到数据库的字节。