我正在开发(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(来自图像类型库的样本)
或
完全不同的东西?
答案 0 :(得分:1)
根据Google的WebP Container Specification,有损和无损格式的WebP文件标题包含12个字节:
您的"图片签名,从Google"显然是RIFF标签的第一个字节对,而来自图像类型库的"样本"是WEBP标记的第一个字节对。存储在文件中或通过互联网传输的WebP图像始终包含RIFF标题,因此您应检查字母“R'”,即“0x52,0x49”。
但请注意,仅检查前两个字节是相当不准确的。安全签名检查将测试前四个字节的RIFF',跳过四个长度字节,然后检查' WEBP'。