HEIC는 고효율 이미지 컨테이너를 나타냅니다. 일부 Apple 장치에 대해 캡처된 이미지의 파일 확장자입니다. 고효율 이미지 포맷 HEIF 이미지를 담을 수 있는 컨테이너입니다. 이 기사에서는 Java 애플리케이션 내에서 HEIF/HEIC 이미지의 EXIF 및 XMP 메타데이터를 추출, 업데이트 및 제거하는 방법에 대해 설명합니다.
EXIF, 교환 가능한 이미지 파일 형식은 가장 일반적인 이미지 및 오디오 형식으로 메타데이터 속성을 저장하는 방법을 정의하는 표준입니다. XMP는 모든 메타데이터 속성 집합을 이름/값 쌍으로 저장할 수 있는 XML 기반 메타데이터 표준입니다.
다음 주제는 아래에서 다룹니다.
EXIF 및 XMP 메타데이터용 Java API
GroupDocs.Metadata는 Java 애플리케이션을 위한 메타데이터 조작 API를 제공합니다. API를 사용하면 다양한 파일 형식에 대한 기능을 읽고, 업데이트하고, 추가하고, 정리/제거하고, 트래버스할 수 있습니다. EXIF, IPTC 및 XMP와 같은 다양한 메타데이터 표준을 지원합니다. 워드 프로세싱 문서, 스프레드시트, 프리젠테이션, 이메일 메시지, eBook, 이미지, AutoCAD 도면, 오디오 및 비디오 파일, 토렌트 등이 지원되는 문서 형식입니다. 보다 정확하게는 메타데이터 조작을 위해 지원되는 파일 형식의 전체 목록에 대한 문서를 방문할 수 있습니다.
다운로드 및 구성
다운로드 섹션에서 메타데이터 라이브러리를 가져옵니다. Maven 기반 Java 애플리케이션의 경우 다음 pom.xml 구성을 추가하기만 하면 됩니다. 그런 다음 이 기사의 예제와 GitHub에서 사용할 수 있는 더 많은 예제를 시도할 수 있습니다. 자세한 내용은 API 참조를 참조하세요.
<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>21.4</version>
</dependency>
Java에서 HEIF/HEIC 이미지의 EXIF 데이터 읽기
다음은 HEIC 및 HEIF 이미지의 EXIF 데이터를 읽고 추출하는 단계입니다.
- Metadata 클래스를 사용하여 HEIF 또는 HEIC 이미지를 로드합니다.
- 루트 패키지를 가져옵니다.
- 루트 패키지에서 EXIF 패키지를 검색합니다.
- EXIF 패키지에서 EXIF 데이터 속성을 탐색할 수 있습니다.
- 또한 EXIF 패키지에서 IFD(Image File Directory) 및 GPS 정보를 얻을 수 있습니다.
다음 코드는 Java를 사용하여 HEIC 이미지의 EXIF 데이터, IFD 및 GPS 메타데이터 정보를 가져오는 방법을 보여줍니다.
// Java에서 HEIF/HEIC 이미지의 EXIF, EXIF IFD, EXIF GPS 패키지 읽기
Metadata metadata = new Metadata("image.heic");
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
String pattern = "%s : %s";
// EXIF 패키지 정보 가져오기
for (TiffTag tag : root.getExifPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
}
// EXIF IFD 패키지 정보 얻기
for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
}
// GPS 정보 얻기
for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
}
}
Java에서 HEIC/HEIF 이미지의 XMP 데이터 읽기
다음 단계는 HEIC 또는 HEIF 이미지의 XMP 메타데이터를 읽습니다.
- Metadata 클래스를 사용하여 HEIF 또는 HEIC 이미지를 로드합니다.
- getRootPackage 메소드를 사용하여 루트 패키지를 가져옵니다.
- 루트 패키지에서 XMP 기본 정보를 얻을 수 있습니다.
- 또한 DCMI Dublin Core 정보를 얻을 수 있습니다.
- 또한 getPhotoshop 메서드를 사용하여 Photoshop 정보를 얻을 수 있습니다.
다음 소스 코드는 Java에서 XMP 기본, DCMI 및 Photoshop 정보를 얻는 방법을 보여줍니다.
// Java에서 heic 및 heif 이미지의 XMP 기본, DublinCore 및 Photoshop 데이터 추출
Metadata metadata = new Metadata("image.heic");
IXmp root = (IXmp) metadata.getRootPackage();
if (root.getXmpPackage() != null) {
// XMP 기본
if (root.getXmpPackage().getSchemes().getXmpBasic() != null) {
XmpBasicPackage xmpBasicPackage = root.getXmpPackage().getSchemes().getXmpBasic();
System.out.println("Creator Tool : " + xmpBasicPackage.getCreatorTool());
System.out.println("Create Date : " + xmpBasicPackage.getCreateDate());
System.out.println("Modify Date : " + xmpBasicPackage.getModifyDate());
System.out.println("Label : " + xmpBasicPackage.getLabel());
System.out.println("Nick Name: " + xmpBasicPackage.getNickname());
// ...
}
// 더블린코어 정보
if (root.getXmpPackage().getSchemes().getDublinCore() != null) {
XmpDublinCorePackage xmpDublinCorePackage = root.getXmpPackage().getSchemes().getDublinCore();
System.out.println("Format : " + xmpDublinCorePackage.getFormat());
System.out.println("Coverage :" + xmpDublinCorePackage.getCoverage());
System.out.println("Identifier : " + xmpDublinCorePackage.getIdentifier());
System.out.println("Source : " + xmpDublinCorePackage.getSource());
// ...
}
// 포토샵 정보
if (root.getXmpPackage().getSchemes().getPhotoshop() != null) {
XmpPhotoshopPackage xmpPhotoshopPackage = root.getXmpPackage().getSchemes().getPhotoshop();
System.out.println("Color Mode : " + xmpPhotoshopPackage.getColorMode());
System.out.println("ICC Profile : " + xmpPhotoshopPackage.getIccProfile());
System.out.println("Country : " + xmpPhotoshopPackage.getCountry());
System.out.println("City : " + xmpPhotoshopPackage.getCity());
System.out.println("Date Created : " + xmpPhotoshopPackage.getDateCreated());
// ...
}
}
마찬가지로 다른 XMP 속성을 설정하거나 업데이트하는 많은 setter 메서드가 있습니다. 사용자 지정 XMP 패키지 속성 설정에 고유한 키-값 쌍을 제공할 수도 있습니다.
Java에서 HEIC/HEIF 이미지의 EXIF 및 XMP 메타데이터 제거
각 EXIF 패키지 또는 XMP 패키지를 null로 설정하여 모든 메타데이터 속성을 제거할 수 있습니다.
다음 코드는 HEIC 이미지의 EXIF 데이터를 제거합니다.
try (Metadata metadata = new Metadata("image.heic")) {
IExif root = (IExif) metadata.getRootPackage();
root.setExifPackage(null);
metadata.save("no-exif-image.heic");
}
다음 코드는 HEIC 이미지의 XMP 데이터를 제거합니다.
try (Metadata metadata = new Metadata("image.heic")) {
IXmp root = (IXmp) metadata.getRootPackage();
root.setXmpPackage(null);
metadata.save("no-xmp-image.heic");
}
결론
요약하자면 Java의 HEIF/HEIC 이미지에서 EXIF 및 XMP 메타데이터를 추출, 업데이트, 제거하는 방법을 배웠습니다. 또한 이 이미지에서 IFD 및 GPS 정보를 얻는 방법을 살펴보았습니다. 이제 이 정보를 쉽게 얻을 수 있고 GroupDocs.Metadata 앱 제품군과 같은 자체 애플리케이션을 구축하여 메타데이터 정보를 자동화할 수 있습니다.
자세한 정보, 옵션 및 예를 보려면 문서 및 GitHub 저장소를 방문하십시오. 추가 질문은 지원 포럼에서 문의하십시오.