【问题标题】:C# Image file information read location details and date [duplicate]C#图像文件信息读取位置详细信息和日期[重复]
【发布时间】:2019-01-22 19:33:22
【问题描述】:

我有图像(Jpg、gif、png 等)本地硬盘。我需要读取所有文件信息,例如位置详细信息、纬度经度或位置名称以及每个图像的创建日期。请帮助我如何阅读位置详细信息和日期。

这是我的 C# 代码,它不显示位置详细信息或创建日期

 string directory = (@"C:\Photos");
 var AllImages = Directory.GetFiles(directory, "*.jpg",
                                   SearchOption.AllDirectories)
                         .Select(Image.FromFile).ToList()

这是我的照片示例之一

.

【问题讨论】:

标签: c#


【解决方案1】:

您要查找的关键字是图像元数据,或EXIF data。您可以从Image.PropertyItems 属性中读取原始数据并手动解析,也可以使用外部库为您完成这项工作。

我推荐ExifLib - 这是一个非常基本但功能强大的库,用于读取 EXIF 数据。这是一个例子:

// Instantiate the reader
using (ExifReader reader = new ExifReader(@"C:\temp\testImage.jpg"))
{
    // Extract the tag data using the ExifTags enumeration
    DateTime datePictureTaken;
    if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
    {
        // Do whatever is required with the extracted information
        MessageBox.Show(this, string.Format("The picture was taken on {0}", 
           datePictureTaken), "Image information", MessageBoxButtons.OK);
    }
}

元数据提取器 dotnet

正如其他人所提到的,另一种方法是使用metadata extractor 的dotnet 版本。

获取时间戳的示例:

var directories = ImageMetadataReader.ReadMetadata(fileStream);
                var directory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
                return directory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal);

【讨论】:

  • 我正在使用 Visual Studio 2015,我是否安装包 ExifLib。我还需要阅读所有图像文件夹。例如 C:\照片
  • 也可以查看metadata-extractor
  • 如果有人来这里寻找 Unity 兼容版本:Metadata-Extractor 似乎使用了 Unity .NET4.0 安装中不可用的 .NET 语言功能,例如统一 2019.3.0f6.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多