2017-07-28 281 views
-1

我已经检查了许多关于LZW压缩的源代码,但它不适用于图像文件。Java LZW压缩和解压缩图像

这里是我迄今检查的资源:

https://www.codemiles.com/java/lzw-data-compression-decompression-algorithm-java-code-t99.html

这一个压缩文件比原始文件

https://codereview.stackexchange.com/questions/122080/simplifying-lzw-compression-decompression

更大能否请您给任何的资源,使用图像压缩? 谢谢!

+1

什么样的图像? GIF已经被LZW压缩了。实际上,大多数图像格式都是压缩的。这些是什么样的图像?什么样的压缩是可以接受的?最后,不要要求非现场资源(这是脱离主题)。 –

+0

我试图压缩jpeg文件,但压缩文件似乎比原来的大。 –

+1

正确。 JPEG已经被压缩。压缩压缩文件通常会生成更大的文件。 –

回答

0

压缩已经压缩的图像不是一个好主意,因为第一次压缩会删除第二台压缩机可以使用的任何统计提示。对于当代压缩算法来说,这至少是正确的,就像它们用于JPEG,PNG,GIF,TIFF和WebP图像格式一样。通常,在十六进制编辑器中查看的压缩文件看起来非常像随机字节流,并且无法压缩随机数据(或具有与随机数据类似的统计属性的非随机数据)。由于存储格式的一些开销,通常结果会比原来的结果还要大。聪明的压缩机检测到这种情况并恢复到只存储原始数据,而不是压缩它。

所以,如果你认为你的图像可能会被进一步压缩,你必须先解压缩它。然后,您可以尝试使用不同的压缩机,以获得更好的结果。不过,我怀疑任何LZW变种都会给你带来比JPEG更大的收益。虽然这是对Lempel-Ziv系列压缩算法的一个非常聪明的增强,但LZW是一种纯粹无损的技术,因此根据图像数据的统计分布,可实现的压缩比有一些固有的限制。 JPEG和其他有损图像格式会影响图像质量,因此可以轻松胜过无损技术。

请注意,GIF格式是一种特殊情况。虽然它使用无损LZW压缩,但它需要最多256个条目的调色板。要将像照片这样的彩色图像编码为GIF,您必须先量化颜色空间以获得256色调色板。这又是一种有损技术,尽管与JPEG和WebP有损耗算法有很大不同。由于图像中RGB信息的减少,量化的GIF图像可以很好地压缩,但会暴露出明显的颜色渐变恶化,就像在人脸,花叶和阴天中发现的那样。另外:如果GIF允许更大的调色板(比如1024),它可能会成为拍摄图像的真正杀手格式。也许是GIF17a格式更新的时候了!