手写设计_解析APNG
APNG是Animated PNG的缩写。
为什么现在主流动态图很少看到?
原因:
1、动态图的流通性虽然大,但市场盈利份额其实很少很少。
2、APNG算是Mozilla处理动态图的“官方”算法,但因为在实际运用中,算法过于沉重,相对于GIF要加载更多代码使得一直得不到主流互联网社区以及浏览应用的支持(目前PC支持的有火狐、QQ、欧朋、IOS8 Safari,还有一两个不记得名字的小众浏览器)。也导致画质粗劣的GIF横行了20多年。
但它的优点足以弥盖缺点的:
1、线条柔和,没有锯齿和黑边
2、能容纳更多的色彩信息
搜集了很多关于APNG的资料,做出整理:
先说说它的运行原理:
它是由数张PNG图片组成的,第一张是PNG,后续每一帧的动画数据会按照约定的规则记录前一帧变化区域的数据得到后续帧数的数据,并保存,解析的时候,应用程序会根据每帧的变化区域的坐标和大小将变化区域替换前一帧相应的区域,来还原当前帧,生成动态图片,并压缩。
*其核心就在于——领近帧共用像素信息
理论说的很绕口,按照通用的表达就是:
1、原图
2、按顺序记录变化区域
3、按顺序解析并替换当前帧
4、生成
5、压缩
实践:
依照理论做出来的APNG要比GIF体积大一些,其原因我也搜索过,其解释是由于APNG需要保证图像色彩(Alpha通道)用的是PNG24,而PNG24和GIF相比较,体积本来就没有优势,转成APNG自然没有优势。通过有损压缩APNG则会更改领近像素信息,会更改其核心原理,只会变得更大。这时候只能对邻近帧的变化区域进行压缩就可以缩小体积。
图片借来的(侵删) 这个动图就利用到了APNG,做到了精细的动画体验。(下图) 来源于“礼物”会编码的同学:
对于原生应用,可以根据 官方说明文档 (https://developer.mozilla.org)编写解码逻辑,目前国内PC端QQ已经支持APNG。
而不会编码的同学:
同时需要批量处理PNG压缩和生成,也有一些软件工具可以处理,例如(http://isparta.github)有免费使用的小工具。