小牛犊 APNG 力挫老古董 MNG

March 3, 2008 11:27 am GMT-0700 | In Tech

GIF 是一个变态的格式,不但当年有专利方面的问题,而且只能支持 256 色,还没有 full alpha 通道,只不过现在还没有别的通用格式可以替代其动画功能,所以 GIF 还是一个相当流行的格式。PNG 1996 年发布的时候就希望打倒 GIF,但是 PNG 的软件支持发展比较慢,特别是 PNG 不支持动画,导致 GIF 一直到现在还没有被打倒。(GIF、JPEG 和 PNG 的比较

PNG 小组的保守派一直强调,祖先定下规矩,PNG 只能存储一张图片。于是,他们在 1996 年就开始琢磨另一种全新的动画格式,叫做 MNG,但是十多年过去了,MNG 却已经销声匿迹。MNG 错在哪里?MNG 的结构太复杂了。PNG 当初作为一种全新的格式,就经过了好几年才开始普及;而 MNG 除了多一个动画功能,也没有太多的好处。Mozilla 浏览器曾经支持过 MNG,但是 2003 年夏天很诡异的把 MNG 支持去掉了。You can support, and then unsupport?这不禁让我想到盖茨在 Bill Gates’ Last Day at Microsoft 中所说的“you can retire, and then unretire?”

Mozilla 去掉 MNG 支持的事情曾在 Bugzilla 上引起轩然大波(Bug 18574 195280)。去掉 MNG 的主要原因是 Mozilla 里维护 MNG 库的 tor 力不从心不想干了。MNG 复杂的结构导致其解码库比 Mozilla 里别的所有图片格式的解码库总和还要大,虽说这 200 kB 的解码库即使在当时 2003 年也根本不算什么,但这是 tor 列举的移除 MNG 支持的第一个理由,因此也常被人误读为 Mozilla 去掉 MNG 的根本原因。MNG 创始人之一 Gerard Juyn 曾写道

Mozilla 1.4 still supports MNG, but current builds have it removed. The decision was made to save space…

FireFox is the lean and mean descendant of Mozilla…

这之后 MNG 的日子越来越不好过,目前主流浏览器里只有 Konqueror 原生支持 MNG,别的都要装插件(Konqueror 算主流浏览器么?)。libpng 目前的维护者 Glenn Randers-Pehrson 在 2007 年承认

After 6 years or so since MNG-1.0 was approved, it seems clear that it is not really going anywhere, mostly due to claims that it is too complex.

互联网发展了这么多年,通用动画格式仍旧只有存在各类问题的 GIF 一种。 2004 年,Mozilla 有两个人痛定思痛,发明了一种基于 PNG 的动画格式,叫 APNG。APNG 比 MNG 好在什么地方?APNG 是对 PNG 格式的一个极小扩展,而非完全从头打造一个全新格式。首先,它和老 PNG 标准完全兼容,不认识 APNG 格式的浏览器可以正确显示 APNG 动画里的第一帧图片;其次,由于它只是对 PNG 格式的一个小扩展,所以支持 APNG 非常简单,PNG 库也只会增加大概 5% 的大小。不过比较搞笑的是,2004 年 APNG 提出之后那两个猪头一直没空实现它,一直到 2006 年有一个机会他们在 Google Summer of Code 找了个小弟 Andrew Smith 实现了 APNG 解码,现在最新的 Firefox 3 beta 和 Opera 9.50 beta 都已经支持 APNG。

APNG 的出现,自然是给渐渐死亡的 MNG 重重一击。PNG 邮件列表上争吵声此起彼伏。2004 年,PNG 创始人之一 Thomas Boutell 在《MNG 已死,有事烧纸》一文中回顾到:

PNG is moderately successful, but it never did replace GIF. That’s mainly because Netscape sprang animated GIF on the world when the PNG specification was nearly final, without saying a word or once suggesting that we include animation.

When animated GIF appeared, I lobbied the PNG group for simple, GIF-style animation support in PNG, … I lost out to those who made eloquent arguments for a more complete animation format (So much for dictatorship. At least I was benevolent.). MNG, the all-singing, all-dancing, all-merciless animation format, took a long time to standardize and was rejected by both major web browser vendors …

Very recently, two young turks decided to invent a simple new animated-PNG format (apng) … It is kicking up a shitstorm on the long-dormant PNG mailing list. The old-timers and the young turks are trying to hash out an agreement. I agree for the most part with the young turks and their design choices.

I could not be more pleased with this development.

Andrew Smith 在 libpng 的 apng 补丁发布网站提到一句 MNG:

MNG already existed at that time but was too big/fancy for most people to accept as an image format (this is the first and last time I mentioned this flamy topic).

这样的争吵持续了很久,2007 年 4 月 PNG 小组投票决定是否允许 APNG 进入官方 PNG 标准,投票以 10:8 否决这个建议,PNG 小组里的顽固分子仍旧相当排斥直接在 PNG 格式上动手动脚支持动画。

标准的诞生,基本上是一个先有鸡还是先有蛋的问题。世上本没有使用 PNG 的人,也没有支持 PNG 的浏览器,更没有制作 PNG 的软件;然而几年过去,三者相互影响并都稳步上升。MNG 一开始面对的也是同样的境地,但却没有流行起来。APNG 其概念本身并不优美,是对 PNG 标准的粗暴践踏,但是因为有的放矢,射中要害,却得到了两个主流浏览器的认可。标准的诞生就是一场恶战,不一定最好的技术就会胜利,TCP/IP 就是一个例子。新标准和新公司一样,只有好的想法和技术并不能成功,市场团队同样重要。市场做好了,烂东西也能变成好东西。

有人对开源软件盲目崇拜,认为软件开了源就是万事大吉,其实缺少了经济利益驱动的开源软件往往官僚更严重,即便在开源团队内部,权威照样存在,更不用说在用户层面上的反馈了。开源不等于开放,开源也不等于民主。AA 软件的 XX 功能能不能改改?你丫不会自己改啊?AA 软件为什么没有 YY 功能?你大爷的你爱用不用。AA 软件的 ZZ 功能是不是有 bug?放屁,这叫 feature!Bugzilla 上这么多反对的声音,Mozilla 的 MNG 支持照样被去掉了。群众力推 APNG,无论其多么的符合实际需求,照样能被 PNG 小组里的老东西打倒。

最后,有人问过我,是否看好 APNG。我想我也预测不了世界范围的图片格式流行趋势,不过如果 IE 不支持 APNG 的话,APNG 还是只能局限在应用程序界面上使用,很难成为网页上的通用图片格式。

(以上所有引文中的下划线都是我加的)APNG 的几个网站:

Tags: , , , , , , , , , ,

12 Comments »

RSS feed for comments on this post.

  1. a core 你终于写出来鸟~~~。 拜一个!

    Comment by aozukina — March 3, 2008 2:26 pm GMT-0700 #

  2. 写得很牛逼啊

    Comment by chen3feng — March 3, 2008 7:18 pm GMT-0700 #

  3. A 董伟大! 最重要的还是搞定 IE。IE 说啥就是啥!

    Comment by kxn — March 4, 2008 7:47 am GMT-0700 #

  4. henniubi!!!!

    Comment by kisstar — March 4, 2008 9:57 am GMT-0700 #

  5. 所谓标准,就是占据了大部分市场,从而让别人不得不兼容它

    Comment by xlight — March 4, 2008 6:13 pm GMT-0700 #

  6. 看不懂。。。

    Comment by nailear — March 6, 2008 9:44 pm GMT-0700 #

  7. 你还真有空,Apng从没看到过。现在不是用flash代替gif显示动画了么?

    Comment by 吉软糖 — March 10, 2008 3:44 pm GMT-0700 #

  8. 狂汗……
    flash主要是矢量动画,最多只能内嵌位图文件。
    GIF动画是位图动画。怎么代替?

    Comment by xxx — June 14, 2008 7:15 pm GMT-0700 #

  9. 哈,不错的文章!最近正准备做opera9.5的skin,琢磨着是否加入apng – –

    Comment by seeyou — October 9, 2008 12:30 am GMT-0700 #

  10. 我打算开始用APNG画画。

    Comment by Hello World! — November 13, 2008 4:40 am GMT-0700 #

  11. 对这么多年过去了
    互联网发展了这么多年

    而却还没有一套完善流行的动画位图格式非常不满,
    无语了,
    那个只能支持256色的gif格式还在流行.
    为什么会这样呢?

    是不是avi,rmvb等视频格式的存在影响了apng类格式的存在和普及?
    gif格式可以不可以扩展啊,能不能修改或扩展gif,来使其支持32位颜色?
    或者新设计一个动画位图格式?参考png
    为什么png小组的人会反对扩展的apng呢?真是无语.

    Comment by David — October 5, 2010 7:36 am GMT-0700 #

  12. 对上面的一切都非常的不理解

    Comment by David — October 5, 2010 7:36 am GMT-0700 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This weblog is licensed under a Creative Commons License.
Powered by WordPress. Theme based on Pool by Borja Fernandez.