PNG文件解读(1):PNG/APNG格式的前世今生
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格式的前世今生的更多相关文章
- 怎么统计指定文件夹下含有.xml格式的文件数目
如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...
- 打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"
问题描述: 系统安装了WPS时,Analyzer导出excel时候,会提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致",这是Excel的安全问题, ...
- Excel:您尝试打开的文件的格式与文件扩展名指定的格式不一致
报错信息: 打开文件时提示"您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致.打开文件前请验证文件没有损坏且来源可信.是否立即打开该文件?",卸载Office 20 ...
- 批量将文件转换为UTF-8无BOM格式
最近有一个项目需要迁移,要把文件全部转换成utf8格式的,本来想用python,后来听说PowerShell很是强大,就试着用了一下,果然好用啊! $list = Get-ChildItem .\ - ...
- trace文件解读
*********************************************************************示例:全表扫描的10046文件解读************** ...
- 悦铃文件必须是CCITT A_Law格式的,且没有被压缩
最近在给公司弄来电彩铃,用的是电信的“悦铃”业务,办理过程不想多说了..给了我个网址和账号让我登录,登录界面惨不忍睹,感觉电信根本没有要宣传这项业务的意思,像是粗制滥造外包赶工做出来的.. 当然这不是 ...
- ExportAsFixedFormat Visio文件另存为其他几种格式的处理
Visio文件另存为其他几种格式的处理,以及另存为Web文件等相关操作. 1.Visio导出为PDF格式 在一般情况下,PDF格式是较为常用的内容格式,因此Visio文档(Vsd格式)导出为PDF也是 ...
- 【原创】打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"
问题描述: 系统安装了WPS时,Analyzer导出excel时候,会提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致",这是Excel的安全问题, ...
- 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密
读取本地json文件,转出为指定格式json 引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...
- 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml): <Window x:Class="SVG2Image.Ma ...
随机推荐
- JVM 学习
目录 1. 类加载器及类加载过程 1.1 基本流程 1.2 类加载器子系统作用 1.3 类加载器角色 1.4 加载过程 (1) 加载 loading (2) 链接 linking 验证 verify ...
- 如何解决Asp.Net Core 3.1上传文件出现跨域
这个问题挺奇怪的,明明就是文件过大的问题,却出现了跨域的错误,搞不懂,有了解的大佬请指教. 但问题还是解决了,其实就是Nginx默认上传大小限制为1M,如果超出了,则出现跨域的错误. 一.自定义Ngi ...
- DM数据库SQL分页案例
DM一哥们找我优化条分页的SQL语句,结果集很小返回99行数据,废话不说安排一下. 原始SQL语句如下,保密要求,给真实的表名换了别名: SELECT count(*) FROM (SELECT TM ...
- Util应用框架基础(六) - 日志记录(四) - 写入 Exceptionless
本文是Util应用框架日志记录的第四篇,介绍安装和写入 Exceptionless 日志系统的配置方法. Exceptionless 是一个日志管理系统,使用 Asp.Net Core 开发,比 Se ...
- JavaSE中的一些面试题
list与Set区别 List 和 Set 是 Java 集合中两个重要的接口,它们在数据存储.数据查找.数据操作等方面有以下几个不同点: 1. 数据存储方式不同:List 是一个有序的 Collec ...
- Webpack.devServer 配置项如何使用?附devServer完整示例
前言: 我们在平常本地开发时,可能经常需要与后端进行联调,或者调用一些api,但是由于浏览器跨域的限制.开发与生产环境的差异.http与https等问题经常让联调的过程不够顺畅.所以本文介绍一下web ...
- C语言已知四位数3025具有一个特殊性质:它的前两位数字30与后两位数字25之和是55,而55的平方正好等于3025。编程找出所有具有这种性质的四位数。
#include<stdio.h> void main() { int n, i, j; for (n = 1000; n < 10000; n++) { i = n / 100; ...
- Mybatis出现Caused by: net.sf.jsqlparser.parser.ParseException: ....异常
今天在开发项目中遇到了一个奇怪的异常,记录一下把! 异常信息如下(截取了主要的部分) Caused by: net.sf.jsqlparser.parser.ParseException: Encou ...
- 怎样在Facebook上开发客户
尽管Facebook的主打社交和娱乐,但它仍是一个有助于开发外贸客户的重要平台.通过利用Facebook的广告.社群.内容分享和直接沟通等功能,您可以扩大您的业务网络,找到更多的外贸客户,并促成国际贸 ...
- ElasticSearch之cat plugins API
命令样例如下: curl -X GET "https://localhost:9200/_cat/plugins?v=true&pretty" --cacert $ES_H ...