Java实现解析照片中EXIF信息内容

第一步:添加依赖
因为是maven项目,需要在pom.xml中添加相关依赖

<!--获取照片exif信息-->
        <dependency>
            <groupId>com.drewnoakes</groupId>
            <artifactId>metadata-extractor</artifactId>
            <version>2.16.0</version>
        </dependency>

第二步:工具类实现

package com.tjcloud.lvyou.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;

import java.io.File;

/**
 * @ClassName: EXIFUtil
 * @Description: 读取照片EXIF信息工具类
 * @Authror: XQD
 * @Date: 2022/7/8 10:37
 */
public class EXIFUtil {

    public static void main(String[] args) throws Exception {
        File file = new File("E:\\data\\2207131130590010.jpg");
        printImageTags(file);
    }

    /**
     * 读取照片里面的信息
     */
    public static JSONObject printImageTags(File file) throws Exception {
        Metadata metadata = ImageMetadataReader.readMetadata(file);
        JSONObject jsonObject = new JSONObject();
        String lat = "";
        String log = "";
        for (Directory directory : metadata.getDirectories()) {
            for (Tag tag : directory.getTags()) {
                // 标签名
                String tagName = tag.getTagName();
                // 标签信息
                String desc = tag.getDescription();
                System.out.println(tagName + "=" + desc);
                switch (tagName) {
                    // 经度
                    case "GPS Longitude":
                        lat = pointToLatlong(desc);
                        jsonObject.put(tagName, lat);
                        break;
                    // 纬度
                    case "GPS Latitude":
                        log = pointToLatlong(desc);
                        jsonObject.put(tagName, log);
                        break;
                    default:
                        jsonObject.put(tagName, desc);
                        break;
                }
            }
        }
        System.out.println("**********" + jsonObject.toJSONString());
        return jsonObject;
    }

    /***
     * 经纬度坐标格式转换(* °转十进制格式)
     * @param point
     */
    public static 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();
    }

}

效果图:
在这里插入图片描述
在这里插入图片描述
解析出来的信息有多有少,这要看照片中具有多少信息。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值