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

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10537.html

(0)
上一篇 2021年7月19日 10:19
下一篇 2021年7月19日 10:19

相关推荐

发表回复

登录后才能评论