PHP 内置了对读取 EXIF 和 IPTC 元数据的支持,但我找不到任何方法来读取 XMP?
最佳答案
XMP 数据直接嵌入到图像文件中,因此可以使用 PHP 的字符串函数从图像文件本身中提取它。
以下演示了此过程(我使用的是 SimpleXML,但所有其他 XML API 甚至简单而巧妙的字符串解析都可能为您提供相同的结果):
$content = file_get_contents($image);
$xmp_data_start = strpos($content, '<x:xmpmeta');
$xmp_data_end = strpos($content, '</x:xmpmeta>');
$xmp_length = $xmp_data_end - $xmp_data_start;
$xmp_data = substr($content, $xmp_data_start, $xmp_length + 12);
$xmp = simplexml_load_string($xmp_data);
只有两点:
- XMP 大量使用 XML 命名空间,因此在使用某些 XML 工具解析 XMP 数据时必须注意这一点。
- 考虑到图像文件的可能大小,您可能无法使用
file_get_contents()
因为此函数将整个图像加载到内存中。使用fopen()
打开文件流资源并检查键序列的数据 block<x:xmpmeta
和</x:xmpmeta>
将显着减少内存占用。
关于php - 如何使用 PHP 从 JPG 读取 XMP 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1578169/