PNG图像文件
Last Updated: 2023-05-22 06:54:24 Monday
-- TOC --
PNG图像采用无损压缩,可以支持Alpha透明通道,在存储Screen Content图像(截屏图像,常常存在大量颜色完全相同的块)的时候,比较有优势,无损并且压缩率较好。但在保存自然风景图像(颜色丰富渐变)时,由于是无损压缩,Size一般都比JPEG文件要大。
PNG: Portable Network Graphics
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的PNG’s Not GIF
,是一种位图文件(bitmap file)存储格式
,读成ping
。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多达16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
- 1995年早期,Unisys公司根据它在GIF格式中使用的LZW数据压缩算法的软件专利开始商业收费,为避免专利影响,用于表现单张图像的PNG、用于表现动画的MNG(Multiple-image Network Graphics/多图像网络图形)图形文件格式被同时创建出来。
- 1996年6月提出PNF(Portable Network Frame)草案,当年8月改名为MNG(Multiple-image Network Graphics)。
- 1996年7月1日,PNG的1.0版本规范发布,后来被称为RFC2083标准,并在1996年10月1日成为W3C建议。
- 1999年8月,Unisys公司进一步中止了对自由软件和非商用软件开发者的GIF专利免费许可,从而使PNG格式获得了更多的关注。(商业模式失败)
- 1998年12月31日发布PNG的1.1版本,小幅修改并增加了三个新的数据块定义
- 1999年8月11日发布PNG的1.2版本,增加了另外一个数据块
- 2001年1月31日发布MNG规范1.0版本,MNG是出自PNG开发组之手,但由于结构复杂的MNG程序库使用过程会占用大量的资源,早期只有较少的浏览器支持,Chrome、IE、Opera、Safari 则从未支持过。Chrome和Opera都在推广自家的WebP
- 2003年11月10,PNG现行版本的国际标准(ISO/IEC 15948:2003)发布,并作为作为W3C建议发布,与PNG1.2版仅有细微差别。(PNG标准:https://www.w3.org/TR/PNG/)
- 2004年末,PNG的动画扩展APNG,由 Mozilla 公司两位 Mozilla 程序员 Stuart Parmenter 和 Vladimir Vukićević 共同设计出来。这是一个相对于MNG更简单的动画实现方案,不识别APNG格式的PNG解码器至少能够正常回放第一幅普通PNG画面。但是APNG,始终是个悲剧,即使在 Mozilla 社区,在2007年前也是拒绝认这个苦命娃。
- 2007年3月23日,Mozilla后知后觉,在 Firefox 3.0 中首次支持 APNG 格式。
- 2007年4月20日,Mozilla希望APNG能成为官方标准,因此PNG组织发起投票,最终以8:10的票数否决了 APNG 进了官方标准,因为 PNG 组织决心继续推广 MNG,但这不并影响 Mozilla 继续支持 APNG。
GIF - 1987、JPEG - 1992、PNG - 1996、APNG - 2004、WebP - 2010
GIF专利所有厂商Unisys在1994年12月宣布开始课征GIF专利的版权税,在1994年宣布之前,此一专利从1985年通过后并没有真正强制实施过。对于Adobe这类软件大厂而言,缴交授权金来使用GIF专利并没有任何问题,但对于提供免费软件的开发人员而言,此一收费条件却形成了限制。原本设计PNG格式的动机就是因为市场的急迫性,W3C组织的Liley表示。原本大家都使用GIF的,但突然间我们不能继续使用了,于是市场就希望推出其它替代格式。
GIF(87年):使用无损压缩,支持256种颜色(一般叫8bit彩色),支持单一透明色。?
PNG是一种无损压缩的图像文件格式,它使用从LZ77派生的无损数据压缩算法。
PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位PNG在24位基础上增加了8位透明通道,因此可展现256级透明程度。
PNG8或PNG24后面的数字代表这种PNG格式最多可以索引和存储的颜色数量。8代表2的8次方,即256色,而24则代表2的24次方,真彩色,即有1600多万色。PNG32在24位基础上增加了8位透明通道,因此可展现256级透明程度。
对于PNG这种图像存储格式,它有两个特点:无损压缩和支持透明效果。
- 由于PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
- PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
- 流式读/写性(streamability):图像文件格式允许连续读出和写入图像数据。(因此适于网络传播)
- 逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。(类似马赛克逐渐消除的过程)
PNG文件前8个byte的值如下:
>>> f = open('xxxx.png','rb')
>>> a = f.read(8)
>>> a.hex(':')
'89:50:4e:47:0d:0a:1a:0a'
>>> a
b'\x89PNG\r\n\x1a\n'
本文链接:https://cs.pynote.net/ag/image/202206301/
-- EOF --
-- MORE --