如何使用ImageMagick从Lightroom导出的JPEG中提取Title字段?
Lightroom导出JPEG中Title字段的存储位置
Lightroom为照片设置的Title并不存储在标准EXIF标签中,而是保存在IPTC元数据的ObjectName(对象名称)字段,同时也会写入XMP元数据的dc:title(Dublin Core标题)字段。
用.NET ImageMagick提取Title的方法
你需要主动读取IPTC或XMP元数据来获取Title,示例代码如下:
- 读取IPTC的
ObjectName字段:
using (var image = new MagickImage("target-image.jpg")) { var iptcProfile = image.GetIptcProfile(); if (iptcProfile != null) { // IPTC ObjectName对应的标签编号为2#005 var title = iptcProfile.GetValue(IptcTag.ObjectName); // 使用title变量做后续处理 } }
- 读取XMP的
dc:title字段:
using (var image = new MagickImage("target-image.jpg")) { var xmpProfile = image.GetXmpProfile(); if (xmpProfile != null) { var xmpXml = XDocument.Parse(Encoding.UTF8.GetString(xmpProfile.ToArray())); XNamespace dc = "http://purl.org/dc/elements/1.1/"; var title = xmpXml.Descendants(dc + "title").FirstOrDefault()?.Value; // 使用title变量做后续处理 } }
补充说明
- Lightroom导出JPEG时默认会同时写入IPTC和XMP元数据,两种读取方式均可获取Title;
- 你之前只看到EXIF数据,是因为ImageMagick默认不会主动暴露IPTC/XMP,需要显式调用
GetIptcProfile()或GetXmpProfile()方法; - 你提取到的Caption(对应EXIF的
ImageDescription),同时也会写入IPTC的Caption/Abstract(2#120)和XMP的dc:description字段。
内容的提问来源于stack exchange,提问作者Duncan Mackenzie
相关产品推荐
相关产品推荐

