You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP提取PNG图片XMP元数据的标题与关键词方法问询

用PHP提取PNG图片XMP元数据的标题与关键词

提取标题(dc:title / photoshop:headline)

XMP是带命名空间的XML,直接用SimpleXMLElement读取时必须先注册对应命名空间,再通过XPath定位节点:

// 注册必要的命名空间
$xmp->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');
$xmp->registerXPathNamespace('photoshop', 'http://ns.adobe.com/photoshop/1.0/');

// 优先提取dc:title(XMP标准标题字段)
$dcTitleNodes = $xmp->xpath('//dc:title/dc:text');
$title = '';
if (!empty($dcTitleNodes)) {
    $title = (string)$dcTitleNodes[0];
}

// 若标准标题为空,尝试提取Photoshop专属的headline字段
if (empty($title)) {
    $headlineNodes = $xmp->xpath('//photoshop:headline');
    if (!empty($headlineNodes)) {
        $title = (string)$headlineNodes[0];
    }
}

提取关键词(rdf:bag下的列表)

关键词一般存放在dc:subject下的rdf:bag容器里,同样需要处理命名空间:

$xmp->registerXPathNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');

// 遍历所有rdf:li节点获取关键词
$keywords = [];
$keywordNodes = $xmp->xpath('//dc:subject/rdf:bag/rdf:li');
foreach ($keywordNodes as $node) {
    $keywords[] = trim((string)$node);
}

// 转成逗号分隔的字符串
$keywordString = implode(', ', $keywords);

非Adobe软件保存的XMP结构差异

  • 标题字段:部分软件会用xmp:Title这类非标准字段存储标题,而非遵循DC(Dublin Core)标准的dc:title
  • 关键词存储:有些工具不会用嵌套的rdf:bag结构,而是直接把关键词用逗号分隔成字符串存在单个字段里
  • 字段完整性:非Adobe软件通常只实现XMP核心规范,不会包含Photoshop专属的扩展字段(比如photoshop:headline)

内容的提问来源于stack exchange,提问作者kontakto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:55:18