java读取JPEG中exif中信息

来源:互联网 发布:python format函数 编辑:程序博客网 时间:2024/05/21 17:06

一般的相机会记录一些图片基本信息之外的扩展信息,例如,经纬度信息,存储与exif中,如下图!

一般情况下是java程序读取不到gps等扩展信息的。如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址:http://code.google.com/p/metadata-extractor/),这个jar提供了支持获取扩展信息的功能。

具体实现的代码如下:

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());    }}

文件信息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;}}

通过以上代码就能得到图片中的exif信息。



原创粉丝点击