我正在尝试将BufferedImage转换为字节数组。我有两个条件。我不应该失去图像的质量。 2.字节数组的大小应与实际图像相同。我尝试了几种选择。
选项1:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
baos.flush();
byte[] imageBytes = baos.toByteArray();
baos.close();
选项2:
WritableRaster raster = image.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] imageBytes = data.getData();
这两个选项都会增加图像的大小(大图像的两倍以上)。
感谢任何帮助。谢谢!
答案 0 :(得分:2)
PNG格式使用lossless data compression,因此您无需担心使用选项1来降低图像质量。
你是如何看到图像尺寸增加的?我确定你知道imageBytes.length
是什么。你有什么比较,你认为这是它应该是它的两倍? (我认为你的假设可能不正确。)
原始源文件可能只是使用比Java重新压缩它更高的压缩设置。您可能需要将一些其他参数传递给编写器。有关其他详细信息,请参阅how to compress a PNG image using Java - 特别是指向http://www.exampledepot.com/egs/javax.imageio/JpegWrite.html的链接。