在 上一篇 中,我们讨论了如何在 Java 中处理图像的 EXIF 数据。在这里,今天我们将研究如何在 C# 中实现相同的目标。如果您还没有访问过上一篇文章,但您想在 C#** 中以编程方式**提取、更新、添加或删除图像的 EXIF 数据,那么本文将指导您完成此操作。我们将介绍以下在 C# 中处理 EXIF 数据的方法:
元数据管理 C# 库
GroupDocs.Metadata for .NET 是元数据管理 .NET API。它为各种受支持的文件格式提供了很长的 功能 列表。它不仅可以从图像中提取元数据,还可以通过各种选项从图像和文档中添加、编辑、更新和删除元数据。
在本文中,我们将使用此 API,因此请确保 下载 其二进制文件或从 NuGet 安装 API。
在 C# 中从图像中读取 EXIF 数据
您可以按照上述步骤轻松读取 EXIF 数据属性。从这张图片中提取EXIF数据开始,93m高的自由女神像。在这里,我们将使用 JPG 文件作为示例图像,但是,我们可以使用任何文件,无论是 PNG、WebP、BMP、GIF、TIFF 还是末尾提到的支持的文件格式中的任何其他文件本文。
- 使用 Metadata 类构造函数加载包含 EXIF 数据信息的图像源文件。
- 通过调用 GetRootPackage() 方法获取它的根包。
- 从根包中,从其 ExifPackage 属性 中获取其 ExifPackage。
- 获得 EXIF 包后,您现在可以访问图像的 EXIF 属性;如 Make、Model、Width、Length、DateTime、版权、软件等,如下面的 C# 代码示例所示。
// Extract EXIF Data Package Information from image in C#
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null && root.ExifPackage != null)
{
Console.WriteLine(root.ExifPackage.Make);
Console.WriteLine(root.ExifPackage.Model);
Console.WriteLine(root.ExifPackage.ImageWidth);
Console.WriteLine(root.ExifPackage.ImageLength);
Console.WriteLine(root.ExifPackage.DateTime);
}
}
上面的代码将显示提供的 JPG 图像的以下可用 EXIF 信息。
Make : NIKON CORPORATION
Model : NIKON D7200
Width : 640
Length : 384
DateTime : 2018:07:06 19:31:05
读取图像的 EXIF IFD 和 GPS 信息
EXIF 数据还包括 Exif IFD(图像文件目录) 和GPS(全球定位系统) 信息。现在对于 IFD 和 GPS 包信息,您只需访问 EXIF 包 的相应属性,即 ExifIfdPackage 或 GpsPackage。从这些包中,您可以提取比下面提到的更多的信息:
- 设备序列号
- 相机所有者姓名
- CFA模式
- 速度
- 图像方向
- 日期戳
- 地区信息
- 海拔高度
- 纬度
- 经度
- ETC。
下面提到的代码可以添加到上述方法中,以显示 EXIF 数据以及 IFD 和 GPS 信息。
// Display EXIF IFD Package Properties like Serial Number and Camera Owner.
Console.WriteLine(root.ExifPackage.ExifIfdPackage.BodySerialNumber);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.CameraOwnerName);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.UserComment);
// Display EXIF GPS Information like Latitude, Longitude, etc.
Console.WriteLine(root.ExifPackage.GpsPackage.Altitude);
Console.WriteLine(root.ExifPackage.GpsPackage.LatitudeRef);
Console.WriteLine(root.ExifPackage.GpsPackage.LongitudeRef);
在 C# 中读取图像的所有 EXIF 标签
您可以提取任何图像的所有 EXIF 属性,您可以以与上述几乎相似的方式进行操作:
- 使用 Metadata 构造函数加载图像。
- 通过调用方法 GetRootPackage() 获取根包。
- 从根包的ExifPackage 属性 中获取EXIF 包。
- 迭代 EXIF 包并获得所需的名称-值对。
- 同样,获取 IFD 和 GPS 包以显示其键和值。
// Extract all EXIF Metadata from the image
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null && root.ExifPackage != null)
{
const string pattern = "{0} = {1}";
// Read all EXIF Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
// Read all EXIF IFD Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.ExifIfdPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
// Read all EXIF GPS Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.GpsPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
}
}
在 C# 中更新 EXIF 属性
您可以轻松更改任何图像的现有 EXIF 数据。以下是您可以遵循的步骤:
更新 EXIF 包
- 通过调用方法GetRootPackage()获取根包。
- 通过将新值分配给相应的属性来设置 ExifPackage 属性,例如将新值分配给:
- root.ExifPackage.Copyright - 设置更新的版权信息。
- 同样,您可以设置艺术家、品牌、型号、软件、图像宽度和高度、日期时间等的值。
更新 EXIF IFD 包
与EXIF包的设置属性类似,我们可以更新EXIF IFD和GPS包的属性。
- 为 root.ExifPackage.ExifIfdPackage.CameraOwnerName 赋值以设置相机所有者。
您可以访问 ExifIfdPackage 或 ExifGpsPackage 类来了解您可以为图像自定义多少。
// Update or change new values in EXIF Data (EXIF Package & EXIF IFD Package).
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null)
{
// Set the EXIF package if it is missing
if (root.ExifPackage == null) {
root.ExifPackage = new ExifPackage();
}
// Setting the desired values in EXIF Package and EXIF IFD Package.
root.ExifPackage.Copyright = "Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.";
root.ExifPackage.ImageDescription = "Statue of Liberty for EXIF Data";
root.ExifPackage.Software = "GroupDocs.Metadata for .NET";
root.ExifPackage.ExifIfdPackage.BodySerialNumber = "GD-2020";
root.ExifPackage.ExifIfdPackage.CameraOwnerName = "GroupDocs";
root.ExifPackage.ExifIfdPackage.UserComment = "Nice image captured in 2018";
metadata.Save("statue-of-liberty-updated.jpg");
}
}
从 C# 中的图像中删除 EXIF 元数据
如果要从任何文件中删除 EXIF 包,只需将其 ExifPackage 属性设置为 null。
// Removing the EXIF data from an image.
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null)
{
root.ExifPackage = null;
metadata.Save("statue-of-liberty-no-exif.jpg");
}
}
支持的图像和其他格式
这些是 GroupDocs.Metadata 当前支持的文件格式,用于图像、音频和视频的 EXIF 数据信息。您可以随时访问 文档 以获取更新信息。
文件类型 | 文件格式 |
---|---|
图片 | BMP、GIF、JPG、JPEG、JPE、JP2、PNG、DJVU、DWG、DXF、WebP、TIFF、PSD、EMF、WMF |
音视频 | MP3、WAV、AVI、MOV/QT、FLV、ASF、DICOM |
查看有关 GroupDocs.Metadata 的更多信息
让我们多谈谈@ 免费支持论坛。