Java字节数组大于jpg图像

Paw*_*cza -2 java arrays byte image

我有一个非常有趣的问题,我正在使用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();
    }
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*ipp 5

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

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

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