이전 포스트에서 Java에서 이미지의 EXIF 데이터를 처리하는 방법에 대해 논의했습니다. 여기, 오늘 우리는 동일하지만 C#에서 달성하는 방법을 살펴볼 것입니다. 마지막 게시물을 방문하지 않았지만 C#에서 프로그래밍 방식으로 이미지의 EXIF 데이터를 추출, 업데이트, 추가 또는 제거하려는 경우 이 문서에서 이를 안내합니다. C#에서 EXIF 데이터를 조작하는 다음 방법을 다룹니다.
메타데이터 관리 C# 라이브러리
GroupDocs.Metadata for .NET은 메타데이터 관리 .NET API입니다. 지원되는 다양한 파일 형식에 대한 기능의 긴 목록이 있습니다. 이미지에서 메타데이터를 추출할 수 있을 뿐만 아니라 다양한 옵션을 사용하여 이미지와 문서에서 메타데이터를 추가, 편집, 업데이트 및 제거할 수 있습니다.
이 기사에서는 이 API를 사용할 것이므로 바이너리를 다운로드하거나 NuGet에서 API를 설치하십시오.
C#의 이미지에서 EXIF 데이터 읽기
언급된 단계에 따라 EXIF 데이터 속성을 쉽게 읽을 수 있습니다. 이 사진에서 EXIF 데이터 추출을 시작으로 93m 높이의 자유의 여신상. 여기에서는 JPG 파일을 예시 이미지로 사용하지만 PNG, WebP, BMP, GIF, TIFF 또는 마지막에 언급된 지원되는 파일 형식의 모든 파일을 사용할 수 있습니다. 이 기사.
- 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에 대해 자세히 알아보기
- 문서(.NET | 자바
- 소스 코드 예시
- API 참조
- GroupDocs.Metadata – 메타데이터 관리 솔루션
더 이야기합시다 @ 무료 지원 포럼.