在远程图像上使用ExifLib

时间:2014-01-31 14:53:39

标签: c# exif exiflib

我有一个应用程序,可以显示远程存储在Twitter,Instagram和Flickr服务器上的图像。我想要的是使用ExifLib来提取Exif信息(主要是GPS数据)并显示它们以获取图像细节。

这是我到目前为止所做的:

string metaData = string.Empty;
string tagValue = string.Empty;

try
{
    using (var wc = new WebClient())
    {
        byte[] imageBytes = wc.DownloadData(imgUrl);

        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            using (ExifReader reader = new ExifReader(ms))
            {
                if (reader.GetTagValue<string>(ExifTags.GPSAltitude, out tagValue))
                    Log.Debug("GPSAltitude: " + tagValue);

                if (reader.GetTagValue<string>(ExifTags.DateTimeDigitized, out tagValue))
                    Log.Debug("DateTimeDigitized: " + tagValue);

                if (reader.GetTagValue<string>(ExifTags.DateTimeOriginal, out tagValue))
                    Log.Debug("DateTimeOriginal: " + tagValue);

                if (reader.GetTagValue<string>(ExifTags.GPSLatitude, out tagValue))
                    Log.Debug("GPSLatitude: " + tagValue);

                if (reader.GetTagValue<string>(ExifTags.GPSLongitude, out tagValue))
                    Log.Debug("GPSLongitude: " + tagValue);

            }
        }
    }
}
catch (Exception ex)
{
    Log.Exception("A problem occurred while fetching Exif data.", ex);
}

但对于每个 imageUrl 来说,似乎没有通过图像的MemoryStream实例化 ExifReader ;它总是命中Exception并指示ExifLib无法找到Exif数据,即使我选择显然有Exif数据的an image from Flickr

我在上面的代码中做错了什么,或者ExifLib不能用于远程图像?

1 个答案:

答案 0 :(得分:1)

您是否尝试过检查imageBytes是否确实包含有效数据? 将其保存到文件中,看看是否从实际文件中重复您的函数会改变任何内容。 也许下载甚至没有成功,你在try..catch中有很多活动。

作为解决方法,首先将数据保存在服务器上的临时文件中并使用它。我知道你想要避免这种情况,但工作比没有好。并将中间结果记录在服务器上,以便区分和调试许多可能的缺陷(例如错误的URL或Flickr,不希望每分钟超过一定的下载量)。