Java讀取圖片的Exif元數據信息
package com.drew.metadata;import java.io.File; import java.io.IOException;
import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException;
public class SampleUsage { /**
* 圖片信息獲取metadata元數據信息 * @param fileName 需要解析的文件 * @return */ public ImgInfoBean parseImgInfo (String fileName) { File file = new File(fileName); ImgInfoBean imgInfoBean = null; try { Metadata metadata = ImageMetadataReader.readMetadata(file); imgInfoBean = printImageTags(file, metadata); } catch (ImageProcessingException e) { System.err.println("error 1a: " + e); } catch (IOException e) { System.err.println("error 1b: " + e); } return imgInfoBean; } /** * 讀取metadata里面的信息 * @param sourceFile 源文件 * @param metadata metadata元數據信息 * @return */ private ImgInfoBean printImageTags(File sourceFile, Metadata metadata) { ImgInfoBean imgInfoBean = new ImgInfoBean (); imgInfoBean.setImgSize(sourceFile.getTotalSpace()); imgInfoBean.setImgName(sourceFile.getName()); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { String tagName = tag.getTagName(); String desc = tag.getDescription(); if (tagName.equals("Image Height")) { //圖片高度 imgInfoBean.setImgHeight(desc); } else if (tagName.equals("Image Width")) { //圖片寬度 imgInfoBean.setImgWidth(desc); } else if (tagName.equals("Date/Time Original")) { //拍攝時間 imgInfoBean.setDateTime(desc); } else if (tagName.equals("GPS Altitude")) { //海拔 imgInfoBean.setAltitude(desc); } else if (tagName.equals("GPS Latitude")) { //緯度 imgInfoBean.setLatitude(pointToLatlong(desc)); } else if (tagName.equals("GPS Longitude")) { //經度 imgInfoBean.setLongitude(pointToLatlong(desc)); } } for (String error : directory.getErrors()){ System.err.println("ERROR: " + error); } } return imgInfoBean; } /** * 經緯度轉換 度分秒轉換 * @param point 坐標點 * @return */ public String pointToLatlong (String point ) { Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim()); Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim()); Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim()); Double duStr = du + fen / 60 + miao / 60 / 60 ; return duStr.toString(); } public static void main(String[] args) { ImgInfoBean imgInfoBean = new SampleUsage().parseImgInfo("C:\\DSC_4564.JPG"); System.out.println(imgInfoBean.toString()); }
} </pre>
文件信息bean類。
package com.drew.metadata;public class ImgInfoBean {
private String imgHeight ;//圖片高度 private String imgWidth ;//圖片寬度 private String dateTime ;//拍攝時間 private String altitude ;//海拔 private String latitude;//緯度 private String longitude ;//經度 private Long imgSize; //文件大小 private String imgName; //文件名稱 public Long getImgSize() { return imgSize; } public void setImgSize(Long imgSize) { this.imgSize = imgSize; } public String getImgName() { return imgName; } public void setImgName(String imgName) { this.imgName = imgName; } public String getImgHeight() { return imgHeight; } public void setImgHeight(String imgHeight) { this.imgHeight = imgHeight; } public String getImgWidth() { return imgWidth; } public void setImgWidth(String imgWidth) { this.imgWidth = imgWidth; } public String getDateTime() { return dateTime; } public void setDateTime(String dateTime) { this.dateTime = dateTime; } public String getAltitude() { return altitude; } public void setAltitude(String altitude) { this.altitude = altitude; } public String getLatitude() { return latitude; } public void setLatitude(String latitude) { this.latitude = latitude; } public String getLongitude() { return longitude; } public void setLongitude(String longitude) { this.longitude = longitude; } public String toString (){ return "[圖片信息]文件名稱:"+ this.imgName+" 文件大小:"+this.imgSize +" 高度:"+this.imgHeight+" 寬度:"+this.imgWidth+" 拍攝時間:"+this.dateTime+" 海拔:"+this.altitude+" 緯度:"+this.latitude+" 經度:"+this.longitude; }
} </pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!