본문 바로가기
Back-end/JAVA & Spring

[JAVA] 자바로 사진(JPEG) 메타데이터[사진정보, GPS] 가져오기

by 꼬바리 2021. 11. 30.

xmpcore.jar
0.09MB
metadata-extractor-2.6.4.jar
0.17MB

 

 

자바 1.5 버전에서는 com.sun.image.codec.jpeg.JPEGCode을 지원해서 자바만으로 메타데이터를 가져올수 있었지만

지금 이 글을 작성하는 시점에서 자바는 1.6버젼 업데이트 37을 일반적으로 사용하고 있으며 1.7버젼도 출시되어 사용되고 있다.

아쉽게도 1.5버전의 com.sun.image는 Sun에서 조차도 사용을 권하고 있지않아 1.6에서는 아예 퇴출 당했다.

고로 메타데이터를 1.6버젼이상에서 가져오라면 라이브러리를 적용해야한다.

metadata-extractor-2.6.4
위 라이브러리를 사용해서 메타데이터를 추출하는데 성공했다.

 

#라이브러리를 추가하고 필요한 import

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.ExifSubIFDDirectory;
import com.sun.image.*;

 

#메타데이터를 가져오는데 필요한 소스

File file = new File(“파일이 저장된 경로”); //ex ) File file = new File(“c:\\upload\\a.jpg”);

if(“image/jpeg”.equals(contentType)){
	Metadata metadata = JpegMetadataReader.readMetadata(file);

	for (Directory directory : metadata.getDirectories()) {
		for (Tag tag : directory.getTags()) {
			System.out.println(tag);
		}	
	}

  ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class);
  Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
  System.out.println(“PictureDate:::”+date);

  System.out.println(contentType + “메타정보 추출 성공”);

}

 

# 메타데이터 중에 GPS정보만 추출하기

 if(“image/jpeg”.equals(contentType)){
  Metadata metadata = JpegMetadataReader.readMetadata(file);
  ExifSubIFDDirectory directory = metadata.getDirectory (ExifSubIFDDirectory.class);
  Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);

  System.out.println(“PictureDate:::”+date);

  GpsDirectory gpsDirectory = metadata.getDirectory(GpsDirectory.class);
  System.out.println(“TAG_GPS_ALTITUDE :::” + gpsDirectory.TAG_GPS_ALTITUDE);
  //System.out.println(“GPS :::” + gpsDirectory.getGeoLocation());
  //System.out.println(“GPS :::” + gpsDirectory.getName());
  //System.out.println(“TAG_GPS_LATITUDE :::” + gpsDirectory.TAG_GPS_LATITUDE);
  //System.out.println(“TAG_GPS_DEST_LATITUDE_REF :::” + gpsDirectory.TAG_GPS_DEST_LATITUDE_REF);
  //System.out.println(“TAG_GPS_LATITUDE :::” + gpsDirectory.TAG_GPS_LONGITUDE);
  //System.out.println(“TAG_GPS_LONGITUDE_REF :::” + gpsDirectory.TAG_GPS_LONGITUDE_REF);
  //(descriptor., descriptor.getGpsLongitudeDescription)

  System.out.println(contentType + “메타정보 추출 성공”);

}
728x90
반응형

댓글