校验和JPEG的数据(不是整个文件)
题
有没有结束-exif/端的频率/最终iptc/开始的数据标记,我可以使用一个校的只是数据的一部分jpg/jpeg(和其他图像的格式)?
解决方案 6
MediaTags 具有用于JPEG,MP3,M4A等
的校验和支持其他提示
我认为这个问题与此相关的一个 计算的散列只有核心的图像数据(不包括元数据)一个图像, https://stackoverflow.com/a/10075170/890106 给一个元素的答案如果你在寻找的代码。
它可能不适用于所有JPG变体:他们中的一些可以嵌入多的图像(强积金/CIPA多图片格式,更详细的信息在 http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF.html)和您可能仍然有一些元数据。此外,一些软件的制UID的形式--[0-9A-F]+--在本文件结束它不应该阅读。最安全解决方案,如果可能来校验和素(虽然你仍然可以有影响力的方向,颜色轮廓,..).
一个简单的方法得到的只是像素数据的散列总和是将JPEG转换成一个32位的BMP或备选地成PNG并计算从该一个哈希和。这将剥去JPEG文件的所有相关信息,甚至会配合不同的充编码的JPEG铅相同的像素数据。你当然可以也直接使用生成骨形成蛋白的内存像素数据,如果你把它(即Windows有几个API函数从任何支持的图像类型得到它)。
您得看看每一种格式。对于JPEG,它看起来像 意味着你可以做的校验和结构与FFEn(例如0xFFE1)开始和校验和每个标记(它看起来像长度如下所述标记和为2个字节在big-endian格式)之后指定的字节部分。有关更多细节,请参阅这里。
由于要为各种图像格式做到这一点,你应该只使用一个通用的图像解压缩库和未压缩的数据运行校验和。这将允许您匹配相同的图像,即使它们在磁盘上不同编码。
如果你想限制自己JPEG,您可以校验SOI和EOI之间的数据。 这个答案可以稍微适应你的需要。