Google图片格式的幻数

时间:2017-07-26 08:39:44

标签: node.js image webp

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

作为Magic Number的指南,我使用了file-type库。在他们的源代码中,他们列出了WebP的Magic编号(第45行):

  

0x57,0x45,0x42,0x50

在我的库中,我只使用前两个字节。所以我使用 0x57 0x45 作为参考。

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

  

0x52和0x49   我也试图为WebP找到Magic Number,但没有成功。我能找到的只有Wiki。但它没有提供Magic Number。

现在我希望你理解我的困境。我应该使用哪些信息?来自文件类型库的那个,还是从Google下载的图像样本中获取信息?

总结一下这个问题,我应该使用:

  

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

  

0x57和0x45(来自图像类型库的样本)

  

完全不同的东西?

1 个答案:

答案 0 :(得分:1)

根据Google的WebP Container Specification,有损和无损格式的WebP文件标题包含12个字节:

  • 32位RIFF标记,由四个ASCII字母' R',' I'' F',' F&#39组成;,即0x52,0x49,0x46,0x46。
  • 文件大小减去8,指定为小端字节顺序的32位无符号整数。
  • 32位WEBP标记,包含四个ASCII字母' W'' E'' B'' P&#39 ;,即0x57,0x45,0x42,0x50。

您的"图片签名,从Google"显然是RIFF标签的第一个字节对,而来自图像类型库的"样本"是WEBP标记的第一个字节对。存储在文件中或通过互联网传输的WebP图像始终包含RIFF标题,因此您应检查字母“R'”,即“0x52,0x49”。

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