问题
如果按一般的元数据获取方法可能会出现下面的情况>>>郁闷中(# ̄~ ̄#)
"XMP": {
"XMP Value Count": "22"
}
分析
从上图可以看出xmp元数据跟大多数的元数据不一样,并不是从directory.Tags中获取各个属性的,而是通过XmlDirectories.XmpMeta.Properties获取到的
解决
FileStream img = new FileStream(imgPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
if (img == null) {
return null;
}
var directories = ImageMetadataReader.ReadMetadata(img);
JObject details = new JObject();
foreach (var directory in directories){
if (directory.HasError){
continue;
}
JObject item = new JObject();
foreach (var tag in directory.Tags){
Console.WriteLine($"[{directory.Name}] { tag.Name}={ tag.Description}");
}
}
var XmlDirectories = directories.OfType<XmpDirectory>().FirstOrDefault();
//取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)
foreach (var property in XmlDirectories.XmpMeta.Properties){
Console.WriteLine($"Path={property.Path} Namespace={property.Namespace} " +
"Value={" + property.Value + "}");
if (!string.IsNullOrEmpty(property.Path))
{
if (property.Path.Equals("Camera:PoiNum")){
rawPicture.PoiNum = int.Parse(property.Value);
Console.WriteLine("rawPicture.PoiNum+" + rawPicture.PoiNum);
}
}
}