EXIF(Exchangeable Image File Format)는 디지털 카메라 및 스캐너에서 주로 사용되는 이미지 및 사운드 형식을 지정하는 표준입니다. EXIF 데이터에는 캡처된 이미지 파일에 대한 태깅 및 메타데이터 정보가 포함됩니다. 메타데이터에는 카메라 제조사, 모델, 셔터 속도, 날짜 및 시간, 조리개, 노출 시간, X 해상도, Y 해상도와 같은 정보가 포함될 수 있습니다. 등.
프로그래밍 방식으로 이미지의 EXIF 데이터를 관리, 추출, 업데이트 또는 제거하려는 경우 이 문서가 적합합니다. 이 기사에서는 Java에서 EXIF 데이터를 조작하는 다음 방법을 다룹니다.
자바 메타데이터 조작 라이브러리
GroupDocs.Metadata for Java는 사용하기 쉬운 메타데이터 관리 Java API입니다. JPG, PNG 또는 WebP와 같은 이미지에서 메타데이터를 추출할 수 있을 뿐만 아니라 다른 옵션을 사용하여 이미지 및 기타 문서에서 메타데이터를 추가, 편집, 업데이트 및 제거할 수 있습니다.
이 기사에서 이 API를 사용하고 있으므로 다운로드하거나 다음 구성을 pom.xml에 추가하여 Maven 기반 애플리케이션에 통합하십시오.
저장소 및 종속성
<repository>
<id>GroupDocsJavaAPI</id>
<name>GroupDocs Java API</name>
<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-metadata</artifactId>
<version>20.5</version>
<classifier>javadoc</classifier>
</dependency>
Java의 이미지에서 EXIF 데이터 추출 - 메타데이터 뷰어
간단한 단계에 따라 EXIF 데이터 속성을 읽을 수 있습니다. 이 에펠탑 사진에서 EXIF 데이터 추출부터 시작하겠습니다. 예시 이미지로 JPG 파일을 선택했습니다. PNG, WebP, BMP, GIF, TIFF 등 모든 파일을 사용할 수 있습니다.
- Metadata 클래스 생성자를 사용하여 EXIF 데이터 정보가 포함된 이미지 소스 파일을 로드합니다.
- getRootPackage() 메서드를 호출하여 루트 패키지를 가져옵니다.
- 루트 패키지에서 getExifPackage() 메서드를 호출하여 EXIF 패키지를 가져옵니다.
- EXIF 패키지가 있으면 다음과 같이 Make, Model, Width, Length, Date-Time 등과 같은 이미지 EXIF 속성을 얻을 수 있습니다. 아래 Java 코드 예제에서.
// Extract EXIF Data Package Information from image in Java
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
// Extract EXIF Package
ExifPackage exifPackage = root.getExifPackage();
System.out.println("Make : " + exifPackage.getMake());
System.out.println("Model : " + exifPackage.getModel());
System.out.println("Width : " + exifPackage.getImageWidth());
System.out.println("Length : " + exifPackage.getImageLength());
System.out.println("DateTime : " + exifPackage.getDateTime());
}
}
다음은 위 코드의 결과로 얻을 EXIF 정보입니다.
Make : NIKON CORPORATION
Model : NIKON D3000
Width : 640
Length : 424
DateTime : 2014:08:09 10:35:13
추가 IFD(이미지 파일 디렉토리) 및 GPS(Global Positioning System) 패키지 정보를 보려면 EXIF 패키지의 해당 메서드를 호출하기만 하면 됩니다(예: getExifIfdPackage()). 또는 getGpsPackage(). 이 패키지에서 다음과 같은 추가 정보를 추출할 수 있습니다.
- 이미지 캡처 장치 일련 번호
- 카메라 소유자 이름
- 사용자 의견
- 고도
- 위도
- 경도
- 등.
IFD 및 GPS 정보와 함께 EXIF 데이터를 표시하기 위해 위의 방법에 추가할 수 있는 코드는 다음과 같습니다.
// EXIF IFD Package
ExifIfdPackage exifIfdPackage = exifPackage.getExifIfdPackage();
System.out.println("BodySerialNumber : " + exifIfdPackage.getBodySerialNumber());
System.out.println("CameraOwnerName : " + exifIfdPackage.getCameraOwnerName());
System.out.println("UserComment : " + exifIfdPackage.getUserComment());
// EXIF GPS Information Package
ExifGpsPackage exifGpsPackage = exifPackage.getGpsPackage();
System.out.println("getAltitude : " + exifGpsPackage.getAltitude());
System.out.println("Latitude Ref : " + exifGpsPackage.getLatitudeRef());
System.out.println("LongitudeRef : " + exifGpsPackage.getLongitudeRef());
Java를 사용하여 이미지의 모든 EXIF 태그 읽기
이미지나 파일의 모든 EXIF 속성을 표시하거나 추출하려면 위의 예와 유사한 단계로 수행할 수 있습니다.
- Metadata 생성자로 파일을 불러오기만 하면 됩니다.
- getRootPackage() 메서드를 호출하여 EXIF 루트 패키지를 가져옵니다.
- getExifPackage() 메서드를 호출하여 EXIF 패키지를 가져옵니다.
- EXIF 패키지를 반복하여 원하는 이름-값 쌍을 얻으십시오.
- 마찬가지로, IFD 및 GPS 패키지를 가져와서 키와 값을 표시합니다.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
String pattern = "%s = %s";
// Reading all EXIF tags.
for (TiffTag tag : root.getExifPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
// Extract all EXIF IFD tags.
for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
// Extract all EXIF GPS tags
for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
}
}
}
Java에서 EXIF 속성 업데이트
이미지나 문서의 기존 EXIF 데이터도 쉽게 변경할 수 있습니다. 단계는 간단합니다.
EXIF 패키지 업데이트
- getExifPackage() 메서드를 호출하여 EXIF 패키지를 가져옵니다.
- 다음과 같은 setter 메소드를 사용하십시오.
- setCopyright() - 업데이트된 저작권 정보를 설정합니다.
- setImageDescription() - 이미지에 대한 설명을 설정합니다.
- 마찬가지로 아티스트, 제조사, 모델, 소프트웨어, 이미지 너비 및 높이, 날짜, 시간 등의 값을 설정할 수 있습니다.
EXIF IFD 패키지 업데이트
EXIF 패키지를 업데이트하는 것처럼 EXIF IFD 및 GPS 패키지의 속성을 업데이트할 수 있습니다. ExifIfdPackage 또는 ExifGpsPackage 클래스를 방문하여 소중한 이미지와 문서를 얼마나 커스터마이징할 수 있는지 알아보세요.
// Update/Set new values in EXIF Data (EXIF Package and EXIF IFD Package).
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
// Set the EXIF package if it's missing
if (root.getExifPackage() == null) {
root.setExifPackage(new ExifPackage());
}
ExifPackage exifPackage = root.getExifPackage();
// Setting the desired values in EXIF Package and EXIF IFD Package.
exifPackage.setCopyright("Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.");
exifPackage.setImageDescription("Eiffel Tower for EXIF");
exifPackage.setSoftware("GroupDocs.Metadata");
exifPackage.getExifIfdPackage().setBodySerialNumber("GD-2020");
exifPackage.getExifIfdPackage().setCameraOwnerName("GroupDocs");
exifPackage.getExifIfdPackage().setUserComment("Nice image captured in 2014");
metadata.save("eiffel-tower-updated.jpg");
}
Java의 이미지에서 EXIF 메타데이터 제거
파일에서 EXIF 패키지를 제거하려면 루트 패키지의 setExifPackage(null)을 호출하여 EXIF 패키지를 null로 설정하기만 하면 됩니다.
// Removing the EXIF data from an image.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
IExif root = (IExif) metadata.getRootPackage();
root.setExifPackage(null);
metadata.save("eiffel-tower-no-exif.jpg");
}
지원되는 이미지 및 기타 형식
다음은 GroupDocs.Metadata에서 현재 지원하는 파일 형식입니다. 업데이트된 정보는 항상 문서를 참조하십시오.
문서 유형 | 파일 형식 |
---|---|
이미지 | 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
- GroupDocs.Metadata – 메타데이터 관리 솔루션
더 이야기합시다 @ 무료 지원 포럼.