Node.js 谷歌图像格式的幻数

Node.js 谷歌图像格式的幻数,node.js,image,webp,Node.js,Image,Webp,我正在开发(Node.js)我自己的小程序来检查文件(图像)类型。到目前为止还不错,直到我尝试为谷歌格式添加验证 作为魔法数字的指南,我使用了图书馆。在源代码中,他们列出了WebP的神奇数字(第45行): 0x57、0x45、0x42、0x50 在我的库中,我只使用前两个字节。因此,我使用0x57和0x45作为参考 在实现之后,我需要一个合适的图像样本。所以我挖了。这是谷歌图书馆的官方样本。 但我从那里下载的图像有不同的签名。我得到: 0x52和0x49 我还试图为WebP找到神奇的数字,但没有

我正在开发(Node.js)我自己的小程序来检查文件(图像)类型。到目前为止还不错,直到我尝试为谷歌格式添加验证

作为魔法数字的指南,我使用了图书馆。在源代码中,他们列出了WebP的神奇数字(第45行):

0x57、0x45、0x42、0x50

在我的库中,我只使用前两个字节。因此,我使用0x570x45作为参考

在实现之后,我需要一个合适的图像样本。所以我挖了。这是谷歌图书馆的官方样本。 但我从那里下载的图像有不同的签名。我得到:

0x52和0x49 我还试图为WebP找到神奇的数字,但没有成功。我所能找到的就是这个。但它并没有提供神奇的数字

现在我希望你理解我的困境。我应该使用什么信息?是从文件类型库中获取信息,还是从谷歌下载的图片样本中获取信息

总结问题,我是否应该使用:

0x52和0x49(图像签名,从谷歌下载)

0x57和0x45(来自图像类型库的示例)

完全不同的东西

根据谷歌的数据,有损和无损格式的WebP文件头由12个字节组成:

  • 32位RIFF标记,由四个ASCII字母“R”、“I”、“F”、“F”组成,即0x52、0x49、0x46、0x46
  • 文件大小减8,以小尾数字节顺序指定为32位无符号整数
  • 32位WEBP标记,由四个ASCII字母“W”、“E”、“B”、“P”组成,即0x57、0x45、0x42、0x50
因此,您的“图像签名,从Google下载”显然是RIFF标记的第一个字节对,而“来自图像类型库的示例”是WEBP标记的第一个字节对。存储在文件中或通过internet传输的WebP图像始终包含RIFF头,因此您应该检查字母“R”、“I”,即0x52、0x49

但是,请注意,仅检查前两个字节是相当不准确的。安全签名检查将测试前四个字节的“RIFF”,跳过四个长度字节,然后检查“WEBP”