当前位置: 首页 > 科技观察

PNG图片压缩原理解析--屌丝的眼泪

时间:2023-03-12 10:08:48 科技观察

png??我们每天都会用到png图片,但是png到底是什么,它的压缩原理是什么?很好,那我就一一给大家讲解。什么是巴新?PNG的全称是PortableNetworkGraphics(便携式网络图形),是一种流行的用于网络传输和显示的图像格式。原因如下:无损压缩:PNG图片基于LZ77派生算法进行压缩,使其具有更高的压缩比,产生更小的文件,且不丢失数据。体积小:使用特殊的编码方式标记重复的数据,使相同格式的图片PNG图片文件的体积更小。由于网络通讯带宽受限,在保证图片清晰逼真的前提下,首选PNG格式图片。支持透明效果:PNG支持为原图定义256级透明度,使图像的边缘可以平滑地与任何背景融合,这是GIF和JPEG所不具备的。PNG类型PNG图片主要分为三种类型,分别是PNG8/PNG24/PNG32。PNG8:PNG8中的8其实是指8bits,相当于用2^8(2的8次方)来存储图片的颜色类型。2^8等于256,也就是说PNG8可以存储256种颜色。如果一张图片颜色比较少,那么设置成PNG8图片类型就很合适了。PNG24:PNG24中的24相当于3乘以8等于24,即用三个8bits分别表示R(红)、G(绿)、B(蓝)。R(0~255),G(0~255),B(0~255),可以表达256次256次256=16777216种颜色的图片,这样PNG24比PNG8的图片可以表示更多色彩的图片。但占用空间相对较大。PNG32:PNG32中的32相当于PNG24加上8bits透明色通道,相当于R(红)、G(绿)、B(蓝)、A(透明)。R(0~255)、G(0~255)、B(0~255)、A(0~255)。比PNG24多了一个A(透明度),也就是说PNG32可以表示和PNG24一样多的颜色,而且还支持256种透明色,可以表示更丰富的图片颜色类型。怎么说呢,总的来说,PNG8/PNG24/PNG32相当于我们屌丝以为我们把女神分为三类:第一类女神=PNG8:当屌丝和舔狗看到这种的时候女神,她们顿时心生欢喜,满脸笑容,焦黑的印堂渐渐舒展开来,眼神也能得到确认,那是一种心跳加速的感觉。第二种女神=PNG24:第二种女神开始发力了,会给鸡巴一种菊花紧绷震耳欲聋的震撼。多接触第二种女神,可以让鸡巴每天都元气满满,延年益寿。三种女神=PNG32:在第三种女神面前,所有语言都是苍白的。超凡脱俗和分身都不足以形容她一半的美。我只在梦里见过。为什么。..我的初恋,看她现在的照片,应该是PNG级别的24.PNG图片数据结构PNG图片的数据结构其实和http请求的结构很像。它是一个数据头后面跟着很多数据块,如下图所示:如果你用vim的视图编码模式打开一个png图片,它会是这样的:看到这一堆十六进制代码,是不是感觉和女神的心思?哥你别慌,说实在的,要是撩妹子真的像那堆乱码那么简单,我和哥早就是妻妾成群了。下面我就一一解释这串十六进制码的含义。89504e470d0a1a0a:这是PNG图像的标题。所有PNG图片的头部都是这串代码。图片软件通过这串代码判断文件是否为PNG格式图片。0000000d:是iHDR数据块的长度,为13。49484452:是数据块的类型,是IHDR,后面是data。000002bc:是图片的宽度。000003a5:是高度。以此类推,每一段十六进制码代表一个特定的含义。其他的我下面就不一一分析了,太多了,小伙伴们自己看吧。WhatkindofPNGimageismoresuitableforcompressingconventionalPNGimages,themoremonotonousthecolor,thelessthecolorvalue,thegreaterthecompressionrate,suchasthefollowingpicture:itisonlycomposedofredandgreen,if0isusedtorepresentred,and1isused代表绿色,那用数字表示这张图就是下面这个样子:000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111我们可以看到,这张图片是用了大量重复的数字,我们可以将重复的数字去掉,直接用数组形式的[0,1]Thispicturecanbedirectlyexpressed,andalargepicturecanbeexpressedwithonlytwonumbers,whichgreatlycompressesapngpicture.so!Themoremonotonousthecolor,thefewerthecolorvalues,andthesmallerthecolordifference,thehigherthecompressionrateandthesmallerthesizeofthepngimage.PNGcompressionThecompressionofPNGimagesisdividedintotwostages:Prediction:Thisstageistopreprocessthepngimages,makingitmoreconvenientforsubsequentcompression.Toputitbluntly,sheisagoddess.Beforemakeup,shewillfirstapplyprimer,lotionandessencetofacilitatesubsequentmakeup,whitening,eyeshadow,lighting,etc.Compression:PerformDeflatecompression,whichcombinestheLZ77algorithmandtheHuffmanalgorithmtoencodepictures.Prediction(Prediction)PNGimagesarepreprocessedwithdifferentialencoding(Deltaencoding)toprocessthevalueofeachchannelineachpixel.Therearemainlyseveraltypesofdifferentialencoding:NofilteringX-AX-BX-(A+B)/2(alsoknownastheaveragevalue)Paethinfers(thisismorecomplicated)Assumethatapngimageisasfollows:Thisimageisagradientcolormapwithgraduallyenhancedred,anditsredcolorisgraduallyenhancedfromlefttoright,mappedtoThevalueofthearrayis[1,2,3,4,5,6,7,8].IfX-Adifferentialencodingisused,itis:[2-1=1,3-2=1,4-3=1,5-4=1,6-5=1,7-6=1,8-7=1]theresultis[1,1,1,1,1,1,1][1,1,1,1,1,1,1]Thisresulthasalargenumberofrepeatednumbers,whichisverysuitableforcompression.Thisiswhyimageswithgradientcolors,imageswithlittlechangeincolorvalues,andimageswithasinglecolorareeasiertocompress.差分编码的目的是尽可能将png图像数据值转化为一组重复的、低值,这样的值更容易被压缩。此外,还需要注意的是,差分编码处理的是每个像素中每个颜色通道的值,R(红色)、G(绿色)、B(蓝色)、A(透明)四个颜色通道。值是单独处理的。压缩(Compression)压缩阶段会对预处理阶段得到的结果进行Deflate压缩,包括霍夫曼编码和LZ77压缩。上面说到,Deflate压缩会把图片的所有重复数据都标记出来,并记录下数据的特征和结构,会得到一张压缩比很大的png图片编码数据。Deflate是一种用于压缩数据流的算法。它可以用于任何需要流压缩的地方。还有,我们之前说过,一个png图片是由很多数据块组成的,但是数据块中的一些信息其实是没有用的。比如你用photoshop保存一张png图片,会有一个block记录“thispicturewascreatedbyphotoshop”,这些信息很多都是没用的,如果你用photoshop的“导出网页格式”,就可以去掉这些无用的信息。导出web格式前后的对比效果如下图所示:可以看到导出web格式后去掉了很多无用的信息后,图片明显小了很多。结论以上是我对png的理解。写得不好,像一个支离破碎的中老年人,杂乱无章。回想当年之所以和初恋分手,是怕影响学习。..但是分开之后,成绩还是很差。他们不仅错过了女神,而且直到现在,他们仍然一无所获。如今人到中年,背负着巨额房贷,家里还有孩子待养。看着在身边呼呼大睡的老婆,他忽然想到了。正如鲁迅所说:“爱情就像在沙滩上捡贝壳,不要捡大的,也不要捡最漂亮的。要捡,就捡自己喜欢的。”最重要的是,喜欢的一旦捡到,就再也不会捡到。”去海边了。。。。。凌晨四点写完文章,不知不觉睡着了,梦到回到十年前的那个夏天,我们都笑得很甜。看着看着你哭泣的脸,我们微笑着和我说再见。