如何使用nodejs上传后检测动画.jpg图像?

时间:2015-04-24 08:06:00

标签: node.js express jpeg image-uploading gif

我正在使用nodejs / expressjs构建一个小应用程序。我为GIF和JPG图像制作了一个上传向导......取决于图像'我会将它们分类为动画图像或普通图像...

GIF --> Animated Images
JPG --> Normal Images

但是我遇到了问题,JPG中的图像可以动画。那么如何检测动画JPG图像呢? 演示动画JPG:http://picforest.net/pic/0237bbca82954e74902a4afba66df221

2 个答案:

答案 0 :(得分:0)

我认为您可以使用EXIF信息找到该信息。

例如,这里是您提供的图片的EXIF信息: http://regex.info/exif.cgi?imgurl=http%3A%2F%2Fcdn.picforest.net%2Fupload%2F2015%2F17%2F0237bbca82954e74902a4afba66df221.jpg

它说这是一张GIF图片。

有一个名为https://github.com/gomfunkel/node-exif的exif节点模块。也许这可能会帮助你

答案 1 :(得分:0)

正如评论中指出的那样,没有动画JPEG(this obscure proposal除外)。不幸的是,这并不意味着您可以依赖图像扩展。扩展只是文件名的一部分,它建议文件类型,但不确定它。例如,您共享的图片具有.jpg扩展名,但实际上它是GIF,并且每个主要浏览器都会将其视为一个。要检测动画图像,您必须检查其内容。例如,对于GIF图像,您可以检查文件的前6个字节是GIF89a还是GIF87a,但这样做只会知道图像是GIF,而不是图像是动画 GIF。如果你只想检测动画GIF,你必须检查它们是否有多个图像描述符块,而且它有点复杂。

值得一提的是,目前浏览器图像格式支持3种可能包含动画的内容:

  • GIF - 这很明显;
  • APNG - 它受Firefox和Safari支持,其他浏览器将这些图片显示为普通的PNG;
  • SVG - 除了IE和Edge之外,所有主流浏览器都支持SMIL动画,还有CSS和ECMAScript动画。

如果你想检测前两种类型的动画你可以使用我的node.js库 - is-animated,它使用起来相当简单:

const isAnimated = require('is-animated');    
isAnimated(someBuffer); // -> true/false

不幸的是,目前它不支持检测动画SVG。