Java 이미지 EXIF 정보 읽는 방법

5120 단어 Java그림EXIF
본고는 자바가 그림 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));
     }
   }
}
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기