ImageMagick 识别 APNG

最近在做一个数字资产的项目,其中就利用了 ImageMagick 来实现生成缩略图的功能,不得不说其能力的强大,诸如 PSD、EPS、AI 等常用的设计软件导出的文件都能转换,更不用说常见的 GIF、PNG、JPG、PDF这些格式了。

在实际使用过程中遇到了 APNG 识别的问题,由于它俩的后缀都是 PNG,所以一开始就单纯地当作了 PNG 来处理,

Animated Portable Network Graphics (APNG

它是 PNG 的扩展,支持了动画,相比于 GIF 的诞生更晚一点,同时向前兼容,如果设备不支持 APNG ,那么依旧展示静态的 PNG 图片。

通过 wikipedia 的资料结合 StackOverflow 的回答,可以看到相比于 PNG 图片,在数据区块构成上多了一个 acTL 的标识

而 ImageMagick 就有能力获取文件的具体信息,我使用了 NPM package 名为 GM 的库,通过内部封装的 identify

方法就可以获取文件具体信息。

imagemagick(path).identify((err, value) => {
    if (err) console.log('获取文件格式出错,', err);
    resolve(value);
});

参考资料:

https://en.wikipedia.org/wiki/Portable_Network_Graphics

https://en.wikipedia.org/wiki/APNG