在上一篇中,我們討論瞭如何在Java中處理圖像的EXIF數據。在這裡,今天我們將研究實現相同但在 C# 中。如果您還沒有訪問過上一篇文章,但想在 C# 中以編程方式提取、更新、添加或刪除圖像的 EXIF 數據,那麼本文將指導您完成此操作。我們將介紹以下在 C# 中處理 EXIF 數據的方法:
元數據管理 C# 庫

GroupDocs.Metadata for .NET 是元數據管理 .NET API。對於各種受支持的文件格式,它有一長串 features。它不僅可以從圖像中提取元數據,還可以使用各種選項從圖像和文檔中添加、編輯、更新和刪除元數據。
在本文中,我們將使用此 API,因此請確保 下載 其二進製文件或從 NuGet 安裝 API。
在 C# 中從圖像中讀取 EXIF 數據
您可以按照上述步驟輕鬆讀取 EXIF 數據屬性。從這張圖片中提取 EXIF 數據開始,93 米高的自由女神像。在這裡,我們將使用 JPG 文件作為示例圖像,但是,我們可以使用任何文件,無論是 PNG、WebP、BMP、GIF、TIFF 還是 支持的文件格式 中提到的任何其他文件本文。

- 使用 Metadata 類構造函數加載包含 EXIF 數據信息的圖像源文件。
- 通過調用 GetRootPackage() 方法獲取其根包。
- 從根包中,從其 ExifPackage 屬性 中獲取其 ExifPackage。
- 擁有 EXIF 包後,您現在可以訪問圖像的 EXIF 屬性;如品牌、型號、寬度、長度、日期時間、版權、軟件等,如下面的 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模式
- 速度
- 圖像方向
- 日期戳
- 區域信息
- 高度
- 緯度
- 經度
- 等等
可以在上述方法中添加下面提到的代碼,以顯示 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 property 中獲取 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目前支持的文件格式。元數據用於圖像、音頻和視頻的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 的更多信息
讓我們多談談@免費支持論壇。