0

我有一个应用程序可以显示远程存储在 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 ;它总是遇到异常并指示 ExifLib 找不到 Exif 数据,即使我从 Flickr中挑选了一张明显有 Exif 数据的图像。

我在上面的代码中做错了什么还是 ExifLib 不能在远程图像上工作?

4

1 回答 1

1

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

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

于 2014-01-31T15:02:27.363 回答