加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java从图片中读取图片的元数据Exif信息

发布时间:2020-12-14 23:37:16 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 一般情况下是java程序读取不到gps等扩展信息的。如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址: http://code.

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读