google 图片格式的幻数

Magic number for google Image Format

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

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

0x57, 0x45, 0x42, 0x50

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

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

0x52 and 0x49 I also tried to find Magic Number for WebP, but without success. All I was able to find is this Wiki. But it does not provide Magic Number.

现在我希望你能理解我的困境。我应该使用什么信息?来自文件类型库的一个,或者从 Google?

下载的图像样本中获取信息

为了总结这个问题,我应该使用:

0x52 and 0x49 (image signature, downloaded from Google)

0x57 and 0x45 (sample from image-type library)

something entirely else?

根据 Google 的 WebP Container Specification,有损和无损格式的 WebP 文件 header 均由 12 个字节组成:

  • 32位RIFF标签,由'R'、'I'、'F'、'F'四个ASCII字母组成,即0x52、0x49、0x46、0x46 .
  • 文件大小减8,指定为little-endian字节顺序的32位无符号整数。
  • 32位WEBP标签,由'W'、'E'、'B'、'P'四个ASCII字母组成,即0x57、0x45、0x42、0x50 .

所以你的"image signature, downloaded from Google"显然是RIFF标签的第一个字节对,而"sample from image-type library"是WEBP标签的第一个字节对。存储在文件中或通过互联网传输的 WebP 图像总是包含 RIFF header,因此您应该检查字母 'R'、'I',即 0x52、0x49。

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