EXIF(Exchangeable Image File Format)는 디지털 카메라 및 스캐너에서 주로 사용되는 이미지 및 사운드 형식을 지정하는 표준입니다. EXIF 데이터에는 캡처된 이미지 파일에 대한 태깅 및 메타데이터 정보가 포함됩니다. 메타데이터에는 카메라 제조사, 모델, 셔터 속도, 날짜 및 시간, 조리개, 노출 시간, X 해상도, Y 해상도와 같은 정보가 포함될 수 있습니다. 등.

프로그래밍 방식으로 이미지의 EXIF 데이터를 관리, 추출, 업데이트 또는 제거하려는 경우 이 문서가 적합합니다. 이 기사에서는 Java에서 EXIF 데이터를 조작하는 다음 방법을 다룹니다.

자바 메타데이터 조작 라이브러리

GroupDocs의 메타데이터 Java API

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 등 모든 파일을 사용할 수 있습니다.

EXIF 데이터용 에펠탑 사진
  • 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 메소드를 사용하십시오.
  • 마찬가지로 아티스트, 제조사, 모델, 소프트웨어, 이미지 너비 및 높이, 날짜, 시간 등의 값을 설정할 수 있습니다.

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

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

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

관련 기사