前回の投稿では、Javaで画像のEXIFデータを処理する方法について説明しました。ここでは、今日、同じことをC#で実現することを検討します。前回の投稿にアクセスしたことがなくても、** C#でプログラムによって画像のEXIFデータを抽出、更新、追加、または削除したい場合**は、この記事で説明します。 C#でEXIFデータを操作する次の方法について説明します。

*EXIFデータの読み取り *画像からすべてのEXIFタグを読み取る *EXIFプロパティの更新 *EXIFメタデータを削除

メタデータ管理C#ライブラリ

GroupDocsによるメタデータ.NETAPI

GroupDocs.Metadata for.NETはメタデータ管理.NETAPIです。サポートされているさまざまなファイル形式の機能の長いリストがあります。画像からメタデータを抽出するだけでなく、さまざまなオプションを使用して、画像やドキュメントからメタデータを追加、編集、更新、および削除することもできます。

この記事ではこのAPIを使用するため、必ずそのバイナリをダウンロードするか、NuGetからAPIをインストールしてください。

C#の画像からEXIFデータを読み取る

上記の手順に従うことで、EXIFデータのプロパティを簡単に読み取ることができます。この写真からのEXIFデータの抽出から始めて、高さ93mの自由の女神。ここではサンプル画像としてJPGファイルを使用しますが、PNG、WebP、BMP、GIF、TIFF、または最後に記載されているサポートされているファイル形式の他のファイルを使用できます。この記事。

EXIFデータ用のLibertyJPG画像
  • Metadataクラスコンストラクターを使用して、EXIFデータ情報を含む画像ソースファイルをロードします。
  • GetRootPackage() メソッドを呼び出して、ルートパッケージを取得します。 *ルートパッケージから、ExifPackageプロパティからExifPackageを取得します。
  • EXIFパッケージを入手すると、画像のEXIFプロパティにアクセスできるようになります。以下のC#コード例に示すように、** Make Model Width Length DateTime **、Copyright、Softwareなどのようになります。
// 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

###画像のEXIFIFDおよびGPS情報を読み取る

EXIFデータには、Exif ** IFD (画像ファイルディレクトリ) および GPS (全地球測位システム) 情報も含まれます。ここで、IFDおよびGPSパッケージ情報については、 EXIFパッケージ**のそれぞれのプロパティ、つまりExifIfdPackageまたはGpsPackageにアクセスする必要があります。これらのパッケージから、以下に記載されているよりもはるかに多くの情報を抽出できます。

*デバイスのシリアル番号 *カメラ所有者名 *CFAパターン

  • スピード *画像の方向 *日付スタンプ *エリア情報 *高度
  • 緯度 *経度 *など。

上記のメソッドに以下のコードを追加して、IFDおよびGPS情報とともにEXIFデータを表示できます。

// 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-更新された著作権情報を設定します。 *同様に、アーティスト、メーカー、モデル、ソフトウェア、画像の幅と高さ、日時などの値を設定できます。

EXIFIFDパッケージを更新

EXIFパッケージの設定プロパティと同様に、EXIFIFDおよび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");
    }
}

サポートされている画像とその他の形式

これらは、画像、音声、およびビデオのEXIFデータ情報に対してGroupDocs.Metadataによって現在サポートされているファイル形式です。更新された情報については、いつでもドキュメントにアクセスしてください。

GroupDocs.Metadataの詳細を見る

*ドキュメント(.NET | [Java][26] *[ソースコードの例][27] *[APIリファレンス][28]

  • GroupDocs.Metadata –[メタデータ管理ソリューション][29]

もっと話しましょう@[無料サポートフォーラム][30]

関連記事

*[Javaでの画像のEXIFデータの管理][31]

[26]: https://docs.groupdocs.com/display/metadatajava/Getting+Started) [27]: https://github.com/groupdocs-metadata/ [28]: https://apireference.groupdocs.com/metadata [29]: https://products.groupdocs.com/metadata [30]: https://forum.groupdocs.com/c/metadata [31]: https://blog.groupdocs.com/ja/2020/05/12/handle-exif-data-of-jpg-png-webp-images-in-java/