检索时在 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 从文件到数据库的字节。
我正在尝试使用以下代码在 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 从文件到数据库的字节。