Java讀取圖片的Exif元數據信息

jopen 9年前發布 | 3K 次閱讀 Java

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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!