将BufferedImage转换为byte []而不会降低质量和增加大小

时间:2012-01-20 05:45:57

标签: java bytearray bufferedimage

我正在尝试将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();

这两个选项都会增加图像的大小(大图像的两倍以上)。

感谢任何帮助。谢谢!

1 个答案:

答案 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的链接。