使用 C# 从图像中提取元数据

您可以通过编程方式添加、编辑、删除或提取以元数据形式存储的图像详细信息,例如高度、宽度、品牌、型号等。作为 C# 开发人员,您可以轻松地在云端以编程方式提取和操作图像的元数据信息。在本文中,您将学习如何在 C# 中使用 REST API 提取和操作图像的元数据。

本文讨论/涵盖以下主题:

文档元数据操作 REST API 和 .NET SDK

为了处理 JPEG 图像的元数据,我将使用 GroupDocs.Metadata Cloud 的 .NET SDK API。它允许您从文档和图像文件格式中添加、编辑、检索和删除元数据属性。您只需定义搜索条件,元数据 Cloud REST API 将负责 支持的文件格式 中指定的元数据操作。它还为 Cloud API 提供 Java SDK 作为其文档元数据操作家族成员

您可以从 NuGet 包管理器或在包管理器控制台中使用以下命令将 GroupDocs.Metadata 安装到您的 Visual Studio 项目:

Install-Package GroupDocs.Metadata-Cloud

在开始执行步骤和可用代码示例之前,请从 仪表板 获取您的客户端 ID 和客户端密码。获得客户端 ID 和密码后,添加如下所示的代码:

string clientID = "112f0f38-9dae-42d5-b4fc-cc84ae644972";
string clientSecret = "16ad3fe0bdc39c910f57d2fd48a5d618";
string myStorage = "";

Configuration configuration = new Configuration(clientID, clientSecret);
configuration.ApiBaseUrl = "https://api.groupdocs.cloud";

在 C# 中使用 REST API 将元数据添加到图像

您可以按照下面给出的简单步骤将元数据添加到图像:

上传图片

首先,使用下面给出的代码示例将 JPEG 文件上传到云端:

// 接口初始化
FileApi fileApi = new FileApi(configuration);
string path = @"C:\Files";

var file = Directory.GetFiles(path, "input.jpg", SearchOption.AllDirectories).FirstOrDefault();
if (file.Length != 0)
{
    var relativeFilePath = file.Replace(path, string.Empty).Trim(Path.DirectorySeparatorChar);

    var fileStream = File.Open(file, FileMode.Open);

    fileApi.UploadFile(new UploadFileRequest(relativeFilePath, fileStream, myStorage));
    fileStream.Close();
}

因此,上传的 JPEG 图像文件将在云端仪表板的 文件部分 中可用。

使用 C# 将元数据添加到图像

您可以按照下面给出的步骤以编程方式将元数据添加到 JPEG 图像。

  • 创建 MetadataApi 实例
  • 在FileInfo模型中设置JPEG图片文件路径
  • 定义添加选项
  • 使用 AddProperty 模型为属性设置 Value 和 SearchCriteria
  • 使用 AddOptions 创建 AddRequest
  • 调用MetadataApi.Add()方法获取结果

以下代码示例展示了如何使用 REST API 将元数据添加到 JPEG 图像。

// 接口初始化
var apiInstance = new MetadataApi(configuration);

// 输入图像路径
var fileInfo = new GroupDocs.Metadata.Cloud.Sdk.Model.FileInfo
{
    FilePath = "input.jpg"
};

// 定义元数据添加选项
var options = new AddOptions
{
    FileInfo = fileInfo,
    Properties = new List<AddProperty>
    {
        new AddProperty
        {
            Value = "All rights reserved.",
            Type = "String",
            SearchCriteria = new SearchCriteria
            {
                TagOptions = new TagOptions
                {
                    PossibleName = "Copyright"
                }
            },
        }
    }
};

// 添加请求
var request = new AddRequest(options);
var response = apiInstance.Add(request);
在 C# 中使用 REST API 从图像添加元数据

在 C# 中使用 REST API 从图像添加元数据

下载图像

上面的代码示例将更新后的 JPEG 文件保存在云端,可以使用以下代码示例下载:

// 接口初始化
var fileApi = new FileApi(configuration);

// 默认路径
var file = "metadata\\add_metadata\\input_jpg\\input.jpg";

// 下载请求
var downloadRequest = new DownloadFileRequest(file, myStorage);

Stream downloadResponse = fileApi.DownloadFile(downloadRequest);
using (var fileStream = File.Create("C:\\Files\\input.jpg"))
{
    downloadResponse.Seek(0, SeekOrigin.Begin);
    downloadResponse.CopyTo(fileStream);
}

使用 C# 更新图像的元数据

您可以按照下面给出的步骤以编程方式更新 JPEG 图像的元数据。

  • 创建 MetadataApi 实例
  • 在FileInfo模型中设置JPEG图片文件路径
  • 定义设置选项
  • 使用 SetProperty 模型为属性设置 NewValue 和 SearchCriteria
  • 使用 SetOptions 创建 SetRequest
  • 通过调用MetadataApi.Set()方法获取结果

以下代码示例展示了如何使用 REST API 设置 JPEG 图像的元数据。请按照前面提到的步骤上传和下载文件。

// 接口初始化
var apiInstance = new MetadataApi(configuration);

// 输入图像路径
var fileInfo = new GroupDocs.Metadata.Cloud.Sdk.Model.FileInfo
{
    FilePath = "input.jpg"
};

// 定义元数据集选项
var options = new SetOptions
{
    FileInfo = fileInfo,
    Properties = new List<SetProperty>
    {
        new SetProperty
        {
            NewValue = "Copyright 2021",
            SearchCriteria = new SearchCriteria
            {
                TagOptions = new TagOptions
                {
                    PossibleName = "Copyright"
                }
            },
            Type = "String"
        }
    }
};

// 更新请求
var request = new SetRequest(options);
var response = apiInstance.Set(request);
在 C# 中使用 REST API 从图像更新元数据

在 C# 中使用 REST API 从图像更新元数据

使用 C# 从图像中删除元数据

您可以按照下面给出的步骤以编程方式从 JPEG 图像中删除元数据。

  • 创建 MetadataApi 实例
  • 在FileInfo模型中设置JPEG图片文件路径
  • 定义删除选项
  • 设置搜索条件
  • 使用 RemoveOptions 创建 RemoveRequest
  • 通过调用 MetadataApi.Remove() 方法获取结果

以下代码示例展示了如何使用 REST API 从 JPEG 图像中删除元数据。请按照前面提到的步骤上传和下载文件。

// 接口初始化
var apiInstance = new MetadataApi(configuration);

// 输入图像路径
var fileInfo = new GroupDocs.Metadata.Cloud.Sdk.Model.FileInfo
{
    FilePath = "input.jpg"
};

// 定义元数据删除选项
var options = new RemoveOptions
{
    FileInfo = fileInfo,
    SearchCriteria = new SearchCriteria
    {
        TagOptions = new TagOptions
        {
            PossibleName = "Copyright"
        }
    }
};

// 删除请求
var request = new RemoveRequest(options);
var response = apiInstance.Remove(request);
在 C# 中使用 REST API 从图像中删除元数据

在 C# 中使用 REST API 从图像中删除元数据

使用 C# 从图像中提取元数据

您可以按照下面给出的步骤以编程方式从 JPEG 图像中提取元数据。

  • 创建 MetadataApi 实例
  • 在FileInfo模型中设置JPEG图片文件路径
  • 定义 ExtractOptions
  • 使用 ExtractOptions 创建 ExtractRequest
  • 通过调用 MetadataApi.Extract() 方法获取结果

以下代码示例展示了如何使用 REST API 从 JPEG 图像中提取元数据。请按照前面提到的步骤上传文件。

// 接口初始化
var apiInstance = new MetadataApi(configuration);

// 源文件
var fileInfo = new GroupDocs.Metadata.Cloud.Sdk.Model.FileInfo
{
    FilePath = "input.jpg"
};

// 提取选项
var options = new ExtractOptions
{
    FileInfo = fileInfo
};

// 提取请求
var request = new ExtractRequest(options);
var response = apiInstance.Extract(request);

// 提取的元数据
if (response.MetadataTree.InnerPackages != null)
{
    var innerPackages = response.MetadataTree.InnerPackages;
   for (int i = 0; i < innerPackages.Count; i++)
    {
        Console.WriteLine($"\nPackage: {innerPackages[i].PackageName}");
        var packageProperties = innerPackages[i].PackageProperties;
       for (int j = 0; j < packageProperties.Count; j++)
        {
            Console.WriteLine(packageProperties[j].Name + " : " + packageProperties[j].Value);
        }
    }
}
图像元数据

图像元数据

上面的代码示例将产生以下输出:

Package: FileFormat
FileFormat : 9
MimeType : image/jpeg
ByteOrder : 1
Width : 480
Height : 360

Package: Xmp
http://ns.microsoft.com/photo/1.0/ :

Package: Exif
Exif.GpsIfd :
Exif.ExifIfd :
Make : Canon
Model : Canon PowerShot S40
Orientation : System.Int32[]
XResolution : System.Double[]
YResolution : System.Double[]
ResolutionUnit : System.Int32[]
DateTime : 2003:12:14 12:01:44
YCbCrPositioning : System.Int32[]
ExifIfd : System.Int64[]
Exif.Thumbnail : System.Byte[] 

在线试用

请尝试使用上述 API 开发的以下 JPEG 元数据操作免费在线工具。 https://products.groupdocs.app/metadata/jpeg

结论

在本文中,您了解了如何添加、编辑、删除和提取云中图像的元数据。本文还介绍了如何以编程方式将 JPEG 图像文件上传到云端并从云端下载。您可以使用 文档 了解有关 GroupDocs.Metadata Manipulation Cloud API 的更多信息。我们还提供了一个 API 参考 部分,让您可以直接通过浏览器可视化我们的 API 并与之交互。如有任何歧义,请随时在论坛上与我们联系。

也可以看看