2014-06-20 60 views
-2

我有一个很有趣的问题较大,我将JPG图像字节数组在Java中,像这样: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)。你们知道为什么会发生这种情况吗?

+0

如果你在linux上,并用右键单击检查图像的大小,然后抱歉的朋友,但我不会_相信你的word_。 –

+0

Jpeg压缩...所以..... –

+0

在Linux上使用图形界面有什么问题??????????你有没有听说过 - Ubuntu?它是操作系统,显然 - 它具有图形(实际上相当不错)接口,就像许多其他Linux发行版一样。 –

回答

5

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

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

当您因为某些原因需要压缩的JPEG数据时,请直接使用FileInputStream访问File对象。

+0

谢谢。这就是我的想法 - 但不确定。你知道任何有关图形格式的好消息吗?最好在线?具体来说,我的意思是像标题,如何阅读它们等等。 –

+0

顺便说一句 - 如果1个像素变成3个字节,那么alpha通道呢? –

+1

@PawelHuszcza JPEG没有alpha通道。 – Philipp