【问题标题】:Magic number for google Image Format谷歌图像格式的幻数
【发布时间】:2018-01-01 11:08:19
【问题描述】:

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

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

0x57、0x45、0x42、0x50

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

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

0x52 和 0x49 我也尝试为 WebP 找到幻数,但没有成功。我能找到的就是这个Wiki。但它不提供幻数。

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

总结问题,我应该使用:

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

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

完全不同的东西?

【问题讨论】:

    标签: node.js image webp


    【解决方案1】:

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

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

    所以你的“图像签名,从谷歌下载”显然是 RIFF 标签的第一个字节对,而“来自图像类型库的样本”是 WEBP 标签的第一个字节对。存储在文件中或通过 Internet 传输的 WebP 图像始终包含 RIFF 标头,因此您应该检查字母“R”、“I”,即 0x52、0x49。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2019-05-12
      • 2013-12-27
      • 2011-12-03
      • 1970-01-01
      相关资源
      最近更新 更多