【问题标题】:How to write WIC XMP people tags to jpg?如何将 WIC XMP 人物标签写入 jpg?
【发布时间】: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可以看。

【问题讨论】:

  • 您需要在带有&lt; 的部分周围加上引号,以防止shell 重定向。试试exiftool "-xmp&lt;=alteredXMP.txt" existingTags.JPG

标签: kotlin exiftool xmp wic


【解决方案1】:

您尝试写入的数据是Microsoft Region Structure 的一部分。 XMP 结构化数据是complex subject,但您应该能够通过将区域名称写入RegionPersonDisplayName 标记并将区域尺寸写入RegionRectangle 来使用exiftool 添加数据。使用示例中的数据,命令将是:
exiftool -RegionPersonDisplayName=findus_l -RegionRectangle="0.48, 0.418, 0.059333, 0.089" /path/to/files

如果您必须编写多个区域,您可以添加它们,但您必须保持名称和匹配维度的顺序相同。例如
exiftool -RegionPersonDisplayName=findus_l -RegionRectangle="0.48, 0.418, 0.059333, 0.089" -RegionPersonDisplayName="John Smith" -RegionRectangle="0.37645533, 0.04499886, 0.35111009, 0.26633097" /path/to/files

这些命令将覆盖任何现有的区域数据。如果您要添加新名称而不覆盖,您可以将等号更改为 PlusEqual +=

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多