이전 포스트에서 Java에서 이미지의 EXIF 데이터를 처리하는 방법에 대해 논의했습니다. 여기, 오늘 우리는 동일하지만 C#에서 달성하는 방법을 살펴볼 것입니다. 마지막 게시물을 방문하지 않았지만 C#에서 프로그래밍 방식으로 이미지의 EXIF 데이터를 추출, 업데이트, 추가 또는 제거하려는 경우 이 문서에서 이를 안내합니다. C#에서 EXIF 데이터를 조작하는 다음 방법을 다룹니다.

메타데이터 관리 C# 라이브러리

GroupDocs의 메타데이터 .NET API

GroupDocs.Metadata for .NET은 메타데이터 관리 .NET API입니다. 지원되는 다양한 파일 형식에 대한 기능의 긴 목록이 있습니다. 이미지에서 메타데이터를 추출할 수 있을 뿐만 아니라 다양한 옵션을 사용하여 이미지와 문서에서 메타데이터를 추가, 편집, 업데이트 및 제거할 수 있습니다.

이 기사에서는 이 API를 사용할 것이므로 바이너리를 다운로드하거나 NuGet에서 API를 설치하십시오.

C#의 이미지에서 EXIF 데이터 읽기

언급된 단계에 따라 EXIF 데이터 속성을 쉽게 읽을 수 있습니다. 이 사진에서 EXIF 데이터 추출을 시작으로 93m 높이의 자유의 여신상. 여기에서는 JPG 파일을 예시 이미지로 사용하지만 PNG, WebP, BMP, GIF, TIFF 또는 마지막에 언급된 지원되는 파일 형식의 모든 파일을 사용할 수 있습니다. 이 기사.

EXIF 데이터용 Liberty JPG 이미지
  • Metadata 클래스 생성자를 사용하여 EXIF 데이터 정보가 포함된 이미지 소스 파일을 로드합니다.
  • GetRootPackage() 메서드를 호출하여 루트 패키지를 가져옵니다.
  • 루트 패키지의 ExifPackage 속성에서 ExifPackage를 가져옵니다.
  • EXIF 패키지가 있으면 이제 이미지의 EXIF 속성에 액세스할 수 있습니다. Make, Model, Width, Length, DateTime, Copyright, Software 등 아래 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(Global Positioning System) 정보도 포함됩니다. 이제 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 - 업데이트된 저작권 정보를 설정합니다.
  • 마찬가지로 아티스트, 제조사, 모델, 소프트웨어, 이미지 너비 및 높이, DateTime 등의 값을 설정할 수 있습니다.

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 데이터 정보를 지원하는 파일 형식입니다. 업데이트된 정보는 항상 문서를 참조하십시오.

GroupDocs.Metadata에 대해 자세히 알아보기

  • 문서(.NET | [자바][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/ko/2020/05/12/handle-exif-data-of-jpg-png-webp-images-in-java/