【发布时间】:2020-05-31 22:56:19
【问题描述】:
我有带有 xml 格式的人员标记信息的图像。我希望编辑此信息并将其添加到还没有它的图片中。通过查看 xml,我假设它基于 people tagging used in the microsoft imaging component.
我还不太了解格式,但到目前为止我了解它,我可以更改或生成xml,我只是不知道在图像中写在哪里。我可能只是犯了一些愚蠢的错误,因为我对这些图像元数据没有经验。因此,如果您认为我只是走错了路,并且可以更简单地完成,请告诉我。
在那些已经包含此 xml 的图像中,我可以使用搜索和替换来更新 xml。但是我有很多图片还没有包含这些信息,我不知道我应该把它写到图片里面的什么地方。
已经包含此信息的图像可以使用exiftool读取如下:
exiftool -xmp -b existingTags.JPG
结果如下xml:
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP
Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:MP="http://ns.microsoft.com/photo/1.2/" xmlns:MPRI="http://ns.microsoft.com/photo/1.2/t/RegionInfo#"
xmlns:MPReg="http://ns.microsoft.com/photo/1.2/t/Region#" xmp:Rating="0"> <dc:subject> <rdf:Bag> <rdf:li>Valeriya
</rdf:li> </rdf:Bag> </dc:subject> <MP:RegionInfo rdf:parseType="Resource"> <MPRI:Regions> <rdf:Bag> <rdf:li
MPReg:Rectangle="0.48, 0.418, 0.059333, 0.089" MPReg:PersonDisplayName="findus_l"/> </rdf:Bag> </MPRI:Regions>
</MP:RegionInfo> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>
但是我无法使用 exiftool 编写信息。当我运行这个命令时,它只是再次读取信息,而不是将文件的内容写入图像:
exiftool -xmp<=alteredXMP.txt existingTags.JPG
一些研究告诉我,exiftool 只能编写特定的 xmp 标签,而从 windows 成像组件中标记标签的人似乎不是其中的一部分。
我应该在图像文件的哪个位置写入信息?我能以某种方式以编程方式找到这个位置,然后将 xml 插入那里吗?
我使用 Kotlin 作为编程语言,但我不介意调用命令行函数或其他程序。
背景:我有一台 Synology Diskstation,并使用名为 photo Station 的附带软件。照片站支持在图像上标记人物并使用此给定格式。很多方面都喜欢photo station,但是人脸识别不好,所以想用自己的但是有photo station可以看。
【问题讨论】:
-
您需要在带有
<的部分周围加上引号,以防止shell 重定向。试试exiftool "-xmp<=alteredXMP.txt" existingTags.JPG