PNG格式的前世今生

png是一种无损压缩的位图片形格式,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法——LZW专利(Lempel-Ziv-Welch)压缩算法专利由Unisys持有,Unisys限制了GIF用在自由软件上的使用,也因此才有PNG格式的诞生。

GIF专利所人厂商Unisys是在1994年12月宣布开始课征GIF专利的版权税,在94年宣布之前,此一专利从1985年通过后并没有真正强制实施过。 对于Adobe这类软件大厂而言,缴交授权金来使用GIF专利并没有任何问题,但对于提供免费软件的开发人员而言,此一收费条件却形成了限制。

原本设计PNG格式的动机就是因应市场的急迫性,W3C组织的Liley表示。原本大家都使用GIF的,但突然间我们不能继续使用了,于是市场就希望推出其它替代格式。

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多万色。PNG 32在24位基础上增加了8位透明通道,因此可展现256级透明程度

PNG的优势

对于PNG这种图像存储格式,它有两个特点:无损压缩和支持透明效果。

  • 由于PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。

  • PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。

PNG发展历史

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版本规范发布,后来被称为RFC 2083标准,并在1996年10月1日成为W3C建议。

1999年8月,Unisys公司进一步中止了对自由软件和非商用软件开发者的GIF专利免费许可,从而使PNG格式获得了更多的关注——各个都不想出这个专利费,如同MP3与OGG

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版仅有细微差别。

2004年末,PNG的动画扩展——APNG,被提出来——由 Mozilla 公司两位 Mozilla 程序员 Stuart Parmenter 和 Vladimir Vukićević 共同设计出 APNG。这是一个相对于MNG更简单的动画实现方案,不识别APNG格式的PNG解码器至少能够正常回放第一幅普通PNG画面。但是APNG,始终是个悲剧,即使Mozilla 社区,在2007年前也是拒绝认这个苦命娃。

2007 年 3 月 23 日,Mozilla 后知后觉,在 Mozilla Firefox 3.0 中 首次支持 APNG 格式。

2007 年 4 月 20 日,Mozilla 希望 APNG 能成为官方标准,因此 PNG 组织发起投票,最终以8:10的票数否决了 APNG 进了官方标准,因为 PNG 组织决心继续推广 MNG,但这不并影响 Mozilla 继续支持 APNG。

PNG vsJPEG2000 vsGIF

早期网络图片格式选择不多,GIF 几乎是唯一选择(GIF - 1987、JPEG - 1992、PNG - 1996、APNG - 2004、WebP - 2010)

PNG个人觉得就是GIF的免专利费的加强版。有人曾预言,2003年6月20日,网络上最受欢迎的图档格式之一GIF专利将过期,PNG格式正寝时将寿终正寝—— 那是因为万恶的IE对PNG的半吊子支持。IE6、7死去后,PNG不是越来越好?

——想使用PNG的半透明功能,但2003年IE浏览器占了90%市场,多数人从IE上看到的结果是相当丑陋的。

JPEG2002作为JPEG的升级版,同时支持有损压缩和无损压缩。但是透明格式还是PNG占据主流。

其实早期的浏览器不支持PNG图像;JPEG和GIF是主流图像格式。由于GIF的颜色深度限制,网页中的有颜色过渡的图像都是使用JPEG。不管怎样,JPEG压缩都会导致图像的轻微模糊。而PNG可以做到在相应颜色深度下的尽可能精确,同时保持图像文件不大。PNG已经渐渐成为一种对于小的梯度图像的较好的选择,众多浏览器都已经对PNG有了很好的支持

PNG规范中不包含嵌入式EXIF(可交换图像文件格式)图像数据的标准,比如数码像机拍得的图像。而TIFF,JPEG 2000, DNG都支持EXIF。

之前写过《JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析》,感兴趣可以点点。

参考文章:

GIF专利失效时 PNG格式正寝时? www.blueidea.com/news/other/2003/1112.asp

APNG 那些事 https://aotu.io/notes/2016/11/07/apng/

转载本站文章《PNG文件解读(1):PNG/APNG格式的前世今生》,
请注明出处:https://www.zhoulujun.cn/html/theory/multimedia/CG-CV-IP/8409.html

PNG文件解读(1):PNG/APNG格式的前世今生相关推荐

  1. PNG文件解读(2):PNG格式文件结构与数据结构解读—解码PNG数据

    PNG文件识别 之前写过<JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析>,JPEG文件是以,FFD8开头,FFD9结尾,中间存储着以0xFFE0~0xFFEF ...

  2. java mapping文件_Android R8 mapping.txt文件解读

    mapping.txt文件解读 链接 R8 Android Gradle Plugin 3.4.0之后,默认使用R8替代原来的ProGuard,R8在编译过程中主要执行: Code shrinking ...

  3. PDK和工艺文件解读

    一.PDK 设计规则: 版图层次定义 几何图形规则 ESD/Latch-up防护规则 天线效应规则 电流密度规则 应力保护规则 PDK文件夹包括: ①工艺库 Spice器件模型,仿真数据模型model ...

  4. bowtie结果sam文件解读

    sam文件解读 @HD    VN:1.0    SO:unsorted @SQ    SN:chr1    LN:249250621 @SQ    SN:chr2    LN:243199373 @ ...

  5. macs2的输出文件解读

    macs2的输出文件解读 NAME_peaks.xls 包含peak信息的tab分割的文件,前几行会显示callpeak时的命令.输出信息包含: 染色体号 peak起始位点 peak结束位点 peak ...

  6. R语言scan函数读取文件为向量或者列表格式实战

    R语言scan函数读取文件为向量或者列表格式实战 目录 R语言scan函数读取文件为向量或者列表格式实战 #基本语法

  7. php如何word转html格式文件,PHP将上传word文件,转化为Html格式,(多种转换方式)

    标签:主机   git   not   __name__   sts   offic   write   otto   ice 方法一: 通过PHPOffice(推荐) 1: composer req ...

  8. python 读取文件读出来是什么格式-深入学习python解析并读取PDF文件内容的方法...

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  9. 写文件 —— 将内容按照指定格式写入配置文件(fwrite()函数-》》向指定的文件中写入若干数据块)

    例如 -- 文件中的配置内容格式如下: dat.txt的文件的内容为 [root@localhost tool]# cat dat.txt  aa1213bbcc1415dd 参数说明 size_t ...

最新文章

  1. 关于 QAbstractItemModel 学习的一点分享
  2. Nginx+tomcat配置集群
  3. linux网络管理基本命令
  4. ubuntu下对Atom配置python的虚拟环境
  5. 亚信安全信舱(DS)取得联通天玑安全平台兼容性认证
  6. 作者:邹本友,男,中国人民大学信息学院博士生, CCF学生会员。
  7. 网络工程师成长日记382-西部数据Juniper网络设备调试
  8. curl: (7) Failed connect to localhost:9200; Connection refused
  9. Atitit 发送post http 功能总结目录1. 常见三种模式 Form-data Form-urlencode Raw 12. Php code 12.1. urlencode
  10. ts文件合并为MP4的方法
  11. eplan连接定义点不显示_EPLAN电气图实例-控制回路(电机回路6)
  12. python中计算均方误差_Python中的均方根误差
  13. Charles设置代理之后,为什么电脑和手机都不能上网
  14. python深拷贝与浅拷贝
  15. SDN相关组织——ONF
  16. 米6 / MIUI10 自带电子邮件应用设置Exchange邮箱
  17. Android 硬件传感器
  18. windows10突然没有蓝牙标识解决办法合集
  19. [Darktable]dt源码分析(未完)
  20. 数据库 内联左联右联 INNER JOIN、LEFT JOIN和RIGHT JOIN

热门文章

  1. 腾讯云服务器系统重新安装
  2. struts新人培训1
  3. TCP/IP和网络相关知识
  4. 关于H5 图片上传(全篇)
  5. Tensorflow2.0:Faster RCNN 代码详解(一)
  6. matlab yuy2转rgb,YUY2转RGB(或BGR)
  7. Java编程配置思路详解,手把手教会你
  8. Asterisk13.23.1如何增加G723编码和G729编码
  9. HTML基础学习之 --网页的宽度、高度自适应
  10. 在哪里能下载纯净的系统镜像?让我来告诉你……