Java 이미지 EXIF 정보 읽는 방법
먼저 EXIF가 무엇인지 소개합니다. EXIF는 Exchangeable Image File의 줄임말로 디지털 카메라 사진을 위한 형식입니다.이런 형식은 디지털 사진의 속성 정보, 예를 들어 카메라의 브랜드와 모델, 사진의 촬영 시간, 촬영할 때 설정한 조리개 크기, 셔터 속도, ISO 등 정보를 기록할 수 있다.이 외에도 촬영 데이터와 사진 포맷 방식을 기록할 수 있어 EXIF 형식을 호환하는 외부 장치, 예를 들어 사진 프린터 등으로 출력할 수 있다.
현재 가장 흔히 볼 수 있는 EXIF 정보를 지원하는 사진 형식은 JPG로 많은 이미지 도구가 그림의 EXIF 정보를 직접 표시할 수 있다. 현재의 일부 유명한 사진 사이트도 사진을 표시하는 데 사용되는 EXIF 정보를 제공한다.본고는 주로 Java 언어가 이미지의 EXIF 정보를 어떻게 읽는지 소개하고, EXIF 정보에 따라 이미지를 사용자가 조회하기에 적합하게 조정하는 방법을 포함한다.
현재 가장 간단하고 사용하기 쉬운 EXIF 정보 처리의 자바 패키지는 Drew Noakes가 쓴 메타데이터-extractor입니다. 이 프로젝트의 최신 버전은 2.3.4이고 EXIF 2.2 버전을 지원합니다.너는 직접http://www.drewnoakes.com/code/exif/이 항목의 최신 버전을 다운로드하면 원본 코드가 포함됩니다.
주의해야 할 것은 모든 JPG 이미지 파일에 EXIF 정보가 포함되어 있는 것은 아닙니다. Windows 자원 관리자에서 선택한 그림을 클릭하면 이 그림에 EXIF 정보가 포함되면 속성 -> 요약에 표시됩니다.
ExifTester.java는 다음과 같습니다.
import java.io.File;
import java.util.Iterator;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.drew.metadata.exif.ExifDirectory;
/**
* EXIF
* @author Winter Lau
*/
public class ExifTester {
public static void main(String[] args) throws Exception {
File jpegFile = new File("C:/1.JPG");
Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
Directory exif = metadata.getDirectory(ExifDirectory.class);
Iterator tags = exif.getTagIterator();
while (tags.hasNext()) {
Tag tag = (Tag)tags.next();
System.out.println(tag);
}
}
}
실행 결과:
[Exif] Make - OLYMPUS OPTICAL CO.,LTD
[Exif] Model - u10D,S300D,u300D
[Exif] Orientation - Top, left side (Horizontal / normal)
[Exif] X Resolution - 72 dots per inch
[Exif] Y Resolution - 72 dots per inch
[Exif] Resolution Unit - Inch
[Exif] Software - 22-1012
[Exif] Date/Time - 2005:04:14 13:47:10
[Exif] YCbCr Positioning - Datum point
[Exif] Exposure Time - 0.01 sec
[Exif] F-Number - F5.2
[Exif] Exposure Program - Program creative (slow program)
[Exif] ISO Speed Ratings - 80
[Exif] Exif Version - 2.20
[Exif] Date/Time Original - 2005:04:14 13:47:10
[Exif] Date/Time Digitized - 2005:04:14 13:47:10
[Exif] Components Configuration - YCbCr
[Exif] Exposure Bias Value - 0 EV
[Exif] Max Aperture Value - F3.1
[Exif] Metering Mode - Multi-segment
[Exif] Light Source - Unknown
[Exif] Flash - Flash did not fire, auto
[Exif] Focal Length - 17.4 mm
[Exif] User Comment -
[Exif] FlashPix Version - 1.00
[Exif] Color Space - sRGB
[Exif] Exif Image Width - 1024 pixels
[Exif] Exif Image Height - 768 pixels
[Exif] File Source - Digital Still Camera (DSC)
[Exif] Windows XP Title -
[Exif] Windows XP Author -
[Exif] Windows XP Keywords -
[Exif] Windows XP Subject -
[Exif] Custom Rendered - Normal process
[Exif] Exposure Mode - Auto exposure
[Exif] White Balance - Auto white balance
[Exif] Digital Zoom Ratio - 1
[Exif] Scene Capture Type - Landscape
[Exif] Gain Control - None
[Exif] Contrast - None
[Exif] Saturation - None
[Exif] Sharpness - None
[Exif] Unknown tag (0xc4a5) - 80 114 105 110 116 73 77 0 480 2 -10...
[Exif] Compression - JPEG (old-style)
[Exif] Thumbnail Offset - 2022 bytes
[Exif] Thumbnail Length - 5864 bytes
[Exif] Thumbnail Data - [5864 bytes of thumbnail data]
특정 정보만 읽기:
package test;
import java.io.File;
import java.util.Iterator;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.drew.metadata.exif.ExifDirectory;
/**
* EXIF
* @author Winter Lau
*/
public class PicExif {
public static void main(String[] args) throws Exception {
File jpegFile = new File(
"C:/1.JPG");
Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
Directory exif = metadata.getDirectory(ExifDirectory.class);
Iterator tags = exif.getTagIterator();
if(exif.containsTag(ExifDirectory.TAG_WIN_AUTHOR)){
System.out.println("Pic author is "+exif.getDescription(ExifDirectory.TAG_WIN_AUTHOR));
}
if(exif.containsTag(ExifDirectory.TAG_WIN_TITLE)){
System.out.println("Pic title is "+exif.getDescription(ExifDirectory.TAG_WIN_TITLE));
}
if(exif.containsTag(ExifDirectory.TAG_WIN_KEYWORDS)){
System.out.println("Pic keyword is "+exif.getDescription(ExifDirectory.TAG_WIN_KEYWORDS));
}
}
}
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.