png图片压缩比例 —— 进行图片传输时是否真的应该进行图片压缩呢
PNG(Portable Network Graphics)图片格式采用的是无损压缩,其压缩原理主要基于以下几种技术:
- 过滤器(Filters)
PNG使用了一种名为“过滤”的技术,目的是在压缩之前通过对每一行像素进行预处理,将数据模式简化,从而提高压缩效率。其原理是通过对图像中像素的颜色差异进行分析,找出可能的冗余信息,进行处理。
PNG支持5种不同的过滤器:
None(无过滤):不对数据进行任何处理,原始数据直接存储。
Sub(子过滤):每个像素的当前值减去它左边像素的值。
Up(上过滤):每个像素的当前值减去它上面像素的值。
Average(平均过滤):每个像素的当前值减去它左边和上面像素的平均值。
Paeth(Paeth过滤):通过一种基于邻近像素预测的算法计算每个像素的值。
这些过滤器通过不同的方式处理像素数据,从而简化像素值的变化,减少冗余,增加压缩效率。
- DEFLATE算法
在完成过滤后,PNG采用DEFLATE算法对图像数据进行压缩。DEFLATE是一种广泛使用的无损压缩算法,主要结合了两种技术:
LZ77算法:这是一种基于字典的压缩方法。它通过查找并替换输入数据中重复的部分来减少数据的冗余。例如,如果图片中有连续相同的像素,LZ77会将这些像素替换为一个指针,指向之前出现的相同像素。
霍夫曼编码(Huffman coding):这是一种无损压缩技术,通过给频繁出现的符号分配较短的二进制代码,较少出现的符号分配较长的二进制代码,从而提高数据压缩率。
结合这两种方法,DEFLATE可以高效地减少PNG图像的文件大小,同时保持无损压缩,即不损失图像质量。
- 块结构(Chunking)
PNG格式使用“块”来组织文件数据,所有的数据被分成若干个块(chunks)。每个块都由头部和数据组成,并且包含有关数据类型的元信息。这种结构有助于文件的灵活性和扩展性。
每个PNG文件至少包含一个“IHDR”块(图像头部),它包含图像的基本信息,如宽度、高度、颜色类型等。
还有数据块“IDAT”包含图像实际的压缩数据。
其他辅助块如“PLTE”存储调色板数据、“tEXt”用于存储文本信息等。
这种结构使得PNG可以适应不同类型的图像,并可以灵活地进行扩展,而不影响图像数据本身的压缩效果。
- Alpha通道(透明度)压缩
PNG支持Alpha通道(透明度)存储,图像的每个像素不仅可以存储颜色信息,还可以存储透明度信息。PNG使用无损压缩对Alpha通道的数据进行处理,减少透明度数据的冗余,提高透明度图像的压缩率。
在PNG格式中,Alpha通道数据并不一定是每个像素都全保存为8位透明度信息,通常可以通过减少颜色种类或使用合适的过滤器来优化透明度信息的存储。
- 色彩类型(Color Type)和位深(Bit Depth)
PNG图像可以选择不同的色彩类型和位深度,这直接影响到压缩的效果:
灰度图像:只有灰度信息,没有颜色数据,通常压缩效果较好。
RGB图像:存储红、绿、蓝三个颜色通道的数据,颜色信息较多,文件大小较大。
RGBA图像:除了RGB颜色信息,还存储Alpha通道(透明度),通常会使文件更大。
PNG也支持不同的位深度(如8位、16位),位深度较低的图像通常会产生更小的文件。
总结:PNG的压缩原理
过滤器:通过分析每行像素的差异,去除冗余信息,提高数据可压缩性。
DEFLATE算法:结合LZ77和霍夫曼编码进行数据压缩,减小文件大小。
块结构:通过灵活的块结构组织图像数据,保证格式的扩展性和效率。
Alpha通道压缩:优化透明度信息的存储,减少数据冗余。
色彩类型和位深:通过选择合适的色彩模式和位深度,优化文件大小和质量的平衡。
通过这些无损压缩技术,PNG能够在不损失图像质量的情况下,尽可能减小图像文件的大小,适用于对图像质量要求高的应用场景,比如图标、图形设计、网页图片等。
PS:
一个高清图像,需要经过裁剪和降低分辨率后进行传输,现在有三种方案:
方案1:
先进行PNG压缩,然后传输,然后再裁剪和降低分辨率,然后解压缩PNG;
方案2:
先裁剪和降低分辨率,然后PNG压缩,然后传输,然后解压缩PNG,
方案3:
先裁剪和降低分辨率,然后直接传输。
在实际的应用中一般默认使用方案1,改进方法一般为方案2,但是我认为,如果最终的裁剪和降低分辨率后的图片的大小为几十KB的大小,那么方案3就是一种可能的更优选择。
其实,并没有什么方案一定是最好的,适合对应的场景才是最好的。
posted on 2025-01-26 17:27 Angry_Panda 阅读(179) 评论(0) 收藏 举报