是否有一些便宜且可靠的方法来检测图像文件是否有 EXIF 数据?诸如“读取前 100 个字节并搜索EXIF子字符串”之类的东西是非常可取的。我不需要阅读和解析它——只知道它是否存在。
关键是它必须非常快。C++ 更可取。
是否有一些便宜且可靠的方法来检测图像文件是否有 EXIF 数据?诸如“读取前 100 个字节并搜索EXIF子字符串”之类的东西是非常可取的。我不需要阅读和解析它——只知道它是否存在。
关键是它必须非常快。C++ 更可取。
您可能会查看file (1)
.
当然,您可以直接调用它,但您可能不需要file
s 的其余功能,所以...
您只需要检查流的前 4 个字节:
bool IsExifStream(const char* pJpegBuffer)
{
static const char stream_prefix1[] = "\xff\xd8\xff\xe1";
return memcmp(pJpegBuffer, stream_prefix1, 4) == 0;
}
您可以阅读PHP EXIF 扩展的源代码- 通过查看 exif_read_data 的实现方式,您可能会找到一些线索。
如果您不需要大量性能,我会使用一些 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 文件中的位置是否相同。这些段可以是可变长度的。