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

문서 유형 파일 형식
이미지 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에 대해 자세히 알아보기

더 이야기합시다 @ 무료 지원 포럼.

관련 기사