2

是否有一些便宜且可靠的方法来检测图像文件是否有 EXIF 数据?诸如“读取前 100 个字节并搜索EXIF子字符串”之类的东西是非常可取的。我不需要阅读和解析它——只知道它是否存在。

关键是它必须非常快。C++ 更可取。

4

4 回答 4

1

您可能会查看file (1).

当然,您可以直接调用它,但您可能不需要files 的其余功能,所以...

于 2009-09-24T13:47:26.833 回答
1

您只需要检查流的前 4 个字节:

bool IsExifStream(const char* pJpegBuffer)
{
    static const char stream_prefix1[] = "\xff\xd8\xff\xe1";
    return memcmp(pJpegBuffer, stream_prefix1, 4) == 0;
}
于 2009-10-19T11:11:59.453 回答
0

您可以阅读PHP EXIF 扩展的源代码- 通过查看 exif_read_data 的实现方式,您可能会找到一些线索。

于 2009-09-24T13:39:42.173 回答
0

如果您不需要大量性能,我会使用一些 Exif 库并让它尝试为您获取 Exif 数据(如果存在)。(pyexif, perl Image::exif, c# MetaDataExtractor 等)

否则,

看看http://en.wikipedia.org/wiki/JPEG#Syntax_and_structure

您需要创建一个简单的二进制解析器来挖掘“段代码”,并找到名为 APP1 的段(如果我理解正确的话)。数据应包含字母“Exif”

例如,在我 PC 上的随机 JPEG 文件中,字节 7-10 表示“Exif”。我不知道所有 JPEG 文件中的位置是否相同。这些段可以是可变长度的。

于 2009-09-24T13:47:29.780 回答