Java字节数组大于jpg图像

时间:2014-06-20 22:59:56

标签: java arrays image byte

我有一个非常有趣的问题,我正在使用Java将jpg图像转换为字节数组,如下所示:

>   public byte[] toBytes(String file) throws IOException {
        File img = new File(file);
        BufferedImage image = ImageIO.read(img);
        WritableRaster r = image.getRaster();
        DataBufferByte data = (DataBufferByte) r.getDataBuffer();

        return data.getData();
    }

这显然只是系统的一部分,但请相信我的话^ _ ^: 这个方法返回一个字节数组,但是当我给它一个大小为20,000字节的.jpg文件时(Linux - 右击图像 - >属性 - >大小显示为大约20 000字节),获得字节数组长度超过345 000,即345 000字节(所有这些都初始化为某些值,而不仅仅是0-s)。你们知道为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

Jpeg是一种高度压缩的图形格式。它使用各种技巧以尽可能少的字节对图像进行编码,而不会使其看起来与原始图像有太大不同(至少就人眼而言)。

但是,使用image.getRaster()光栅化图像时,图像会被解码。恢复所有压缩技巧以创建一个每像素3个字节的未压缩图像(一个用于红色,绿色和蓝色)。

如果由于某种原因需要压缩的JPEG数据,请直接使用FileInputStream访问File对象。