0

如何使用元数据查询语言从图像中检索制造商注释?我正在尝试使用的图像是使用尼康 D300 拍摄的 jpeg。

我已经能够获得 EXIF 和 GPS 数据,但我不确定要使用哪个 IFD 和查询字符串来查找制造商注释。

我尝试了各种不同的 IFD(Nikon、Nikon3、Nikon-3 等)和查询,但无法检索到任何结果:

tagValueQuery = string.Format("/app1/ifd/Nikon3/subifd:{{ushort={0}}}", tag);
            if (metadata.ContainsQuery(tagValueQuery))
                return metadata.GetQuery(tagValueQuery);

我一直使用这个网站作为尼康标签号码的参考:http: //gvsoft.homedns.org/exif/makernote-nikon-type3.html

谢谢您的帮助!

4

1 回答 1

1

要获取标准相机标签(FNumber、ExposureTime 等)的 EXIF 值,我使用了 MSDN 上定义的列表 - 本机图像格式元数据查询(http://msdn.microsoft.com/en-us/library/ee719904%28VS .85%29.aspx ) - 向下滚动并在 EXIF 元数据下,您可以获得标签的名称。

要获取标签的值,您需要添加“System.Photo”。在标签名称之前。例如,要获取 FNumber,完整的标签名称是:“System.Photo.FNumber”。

我编写了以下辅助方法来读取 EXIF 数据:

public object GetMetadataValue(BitmapMetadata bitmapMetadata, string metadataQuery)
{
    object metadataValue;

    metadataQuery = "System.Photo." + metadataQuery;

    if (bitmapMetadata.ContainsQuery(metadataQuery))
        metadataValue = bitmapMetadata.GetQuery(metadataQuery);
    else
        metadataValue = null;

    return metadataValue;
}

public T GetMetadataValue<T>(BitmapMetadata bitmapMetadata, string metadataQuery)
{
    object metadataValue = GetMetadataValue(bitmapMetadata, metadataQuery);

    if (metadataValue != null && metadataValue.GetType() == typeof(T))
        return (T)metadataValue;

    return default(T);
}

public string GetMetadataText(BitmapMetadata bitmapMetadata, string metadataQuery)
{
    object metadataValue = GetMetadataValue(bitmapMetadata, metadataQuery);

    return metadataValue == null ? "" : metadataValue.ToString();
}

比 FNumber 可以简单地得到:

GetMetadataText(bitmapMetadate, "FNumber")

获得曝光时间有点棘手:

string exposureTimeText;
double exposureTime = GetMetadataValue<double>(bitmapMetadate, "ExposureTime");

if (exposureTime == 0.0)
    exposureTimeText = "";
else if (exposureTime < 1.0)
    exposureTimeText = string.Format("1/{0}s", 1 / exposureTime);
else
    exposureTimeText = string.Format("{0:0.0}s", exposureTime);
于 2013-12-26T20:09:55.430 回答