【问题标题】:Find content in XMP file with PHP使用 PHP 在 XMP 文件中查找内容
【发布时间】:2021-02-12 15:53:46
【问题描述】:

我有一个包含以下内容的 yxz.xml 文件:

<x:xmpmeta xmlns:x="adobe:ns:meta/"
    x:xmptk="Adobe XMP Core 6.0-c005 79.164590, 2020/12/06-10:37:24        ">
    <rdf:RDF
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"
            xmlns:exifEX="http://cipa.jp/exif/1.0/"
            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
            rdf:about="" xmp:Rating="1"
            xmp:ModifyDate="2021-01-02T08:30:15+02:00"
            xmp:CreateDate="2020-03-16T09:12:03"
            xmp:MetadataDate="2021-02-02T08:24:16+06:00"
            xmp:CreatorTool="Adobe Photoshop 20.4 (Windows)"
            dc:format="image/jpeg" aux:SerialNumber="039138000900"
            aux:LensInfo="400/1 400/1 0/0 0/0" aux:Lens="Canon 400mm Lens"
            aux:LensID="174" aux:LensSerialNumber="0000000000"
            aux:ImageNumber="0" aux:ApproximateFocusDistance="676/100"
            aux:FlashCompensation="0/1" aux:OwnerName="John Doe"
            aux:Firmware="1.2.1" exifEX:LensModel="Canon 400mm lens"
            photoshop:DateCreated="2019-06-10T11:11:07.045"
            photoshop:LegacyIPTCDigest="49BDFEREFDSFG18CD16CACC5E64854"
            xmpMM:DocumentID="xmp.did:74FE0B7A62DE11EBEBHDG5U7FSE642A4"
            xmpMM:OriginalDocumentID="D31C0FB3419167BE41B5382649423449"
            xmpMM:InstanceID="xmp.iid:74FE0B7962DE11EBB4A0ABFFFFFFFA4">
            <dc:creator>
                <rdf:Seq>
                    <rdf:li>John Doe</rdf:li>
                </rdf:Seq>
            </dc:creator>
            <dc:rights>
                <rdf:Alt>
                    <rdf:li xml:lang="x-default">All rights reserved</rdf:li>
                </rdf:Alt>
            </dc:rights>
            <photoshop:DocumentAncestors>
                <rdf:Bag>
                    <rdf:li>xmp.did:9713f9f9-650f-4f88-kas9-5a516d4e11ef</rdf:li>
                </rdf:Bag>
            </photoshop:DocumentAncestors>
            <xmpMM:History>
                <rdf:Seq>
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:8fc0ec65-794c-23d8-90d4-2fdaa6e34f82"
                        stEvt:when="2020-01-23T17:28:12+02:00"
                        stEvt:softwareAgent="Adobe Photoshop Camera Raw 12.1"
                        stEvt:changed="/metadata" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:d0d911db-71b2-4274-674b-4823d2b1dab4"
                        stEvt:when="2020-02-10T11:28:19+02:00"
                        stEvt:softwareAgent="Adobe Photoshop Camera Raw 12.1 (Windows)"
                        stEvt:changed="/metadata" />
                    <rdf:li stEvt:action="derived"
                        stEvt:parameters="converted from image/x-canon-cr2 to image/tiff" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                        stEvt:when="2020-01-01T23:18:16+02:00"
                        stEvt:softwareAgent="Adobe Photoshop Camera Raw 13.1 (Windows)"
                        stEvt:changed="/" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                        stEvt:when="2020-01-02T19:13:13+02:00"
                        stEvt:softwareAgent="Adobe Photoshop 22.1 (Windows)"
                        stEvt:changed="/" />
                    <rdf:li stEvt:action="converted"
                        stEvt:parameters="from image/tiff to application/vnd.adobe.photoshop" />
                    <rdf:li stEvt:action="derived"
                        stEvt:parameters="converted from image/tiff to application/vnd.adobe.photoshop" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                        stEvt:when="2020-01-01T19:03:07+02:00"
                        stEvt:softwareAgent="Adobe Photoshop 22.1 (Windows)"
                        stEvt:changed="/" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                        stEvt:when="2021-01-01T01:03:08+011:00"
                        stEvt:softwareAgent="Adobe Photoshop 22.1 (Windows)"
                        stEvt:changed="/" />
                    <rdf:li stEvt:action="converted"
                        stEvt:parameters="from application/vnd.adobe.photoshop to image/jpeg" />
                    <rdf:li stEvt:action="derived"
                        stEvt:parameters="converted from application/vnd.adobe.photoshop to image/jpeg" />
                    <rdf:li stEvt:action="saved"
                        stEvt:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                        stEvt:when="2001-01-01T01:43:11+03:00"
                        stEvt:softwareAgent="Adobe Photoshop 22.1 (Windows)"
                        stEvt:changed="/" />
                </rdf:Seq>
            </xmpMM:History>
            <xmpMM:DerivedFrom
                stRef:instanceID="xmp.iid:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                stRef:documentID="adobe:docid:photoshop:97f341c8-320f-4d28-kak9-5b917f4e11ff"
                stRef:originalDocumentID="D31C0FB34245A4B764F23EB6D25CEE49" />
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>

我如何列出如下结果:

echo aux:OwnerName
//output John Doe

echo aux:LensID
// output 174

echo aux:FlashCompensation
//output 0/1

...和其他条目,使用 PHP?

【问题讨论】:

  • 您可以使用 SimpleXML 进行搜索
  • SimpleXML 无法创建对象,可能是我用错了方法。请告诉我你的解决方案!
  • 尝试将 SimpleXMLElement 结合到 XPath
  • [解析嵌套的 XML/RDF] (stackoverflow.com/a/10067812/2331686)
  • $xml = new SimpleXMLElement($xmp_data); $xml-&gt;registerXPathNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); $lens_id = $xml-&gt;xpath('rdf:Description/aux:LensID'); print_r($lens_id); 没有输出,只有两条警告消息:Undefined namespace prefix in... 和 xmlXPathEval: evaluation failed in

标签: php xml image adobe xmp


【解决方案1】:

这样做更简单:

$doc = new DOMDocument;
$doc->loadxml($xmp_data);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('aux', 'http://ns.adobe.com/exif/1.0/aux/');

echo $xpath->query('//@aux:OwnerName')[0]->nodeValue ."\n";
echo $xpath->query('//@aux:LensID')[0]->nodeValue ."\n";
echo $xpath->query('//@aux:FlashCompensation')[0]->nodeValue;

输出:

John Doe
174
0/1

【讨论】:

  • 试过你的代码,但收到 HTTP ERROR 500。
  • @Luther 这是内部服务器问题;它与问题无关。
  • 只有在粘贴代码后才会发生。如果我删除,错误 500 就会消失。
  • 使用 DOMXpath::evaluate() 和 Xpath 字符串类型转换来避免不存在的节点出现问题。 3v4l.org/1q6SI
  • @ThW 你是对的,这个解决方案按预期工作!非常感谢!
猜你喜欢
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多