引入依赖
<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.11.0</version> </dependency> 编写解析代码工具类
public static void main(String[] args) throws Exception{ File file = new File("D:\\DJI_0066.JPG"); printImageTags(file); } /** * 读取照片里面的信息 */ private static void readPicture(File file) throws Exception{ Metadata metadata = ImageMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { String tagName = tag.getTagName(); //标签名 String desc = tag.getDescription(); //标签信息 if (tagName.equals("Image Height")) { System.out.println("图片高度: "+desc); } else if (tagName.equals("Image Width")) { System.out.println("图片宽度: "+desc); } else if (tagName.equals("Date/Time Original")) { System.out.println("拍摄时间: "+desc); }else if (tagName.equals("GPS Latitude")) { System.err.println("纬度 : "+desc); // System.err.println("纬度(度分秒格式) : "+pointToLatlong(desc)); } else if (tagName.equals("GPS Longitude")) { System.err.println("经度: "+desc); // System.err.println("经度(度分秒格式): "+pointToLatlong(desc)); } } } } /** * 经纬度格式 转换为 度分秒格式 ,如果需要的话可以调用该方法进行转换 * @param point 坐标点 * @return */ 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(); } } 运行结果如下
图片高度: 3648 pixels 图片宽度: 5472 pixels 图片宽度: 5472 pixels 图片高度: 3648 pixels 拍摄时间: 2020:07:21 09:03:30 纬度 : 31° 58' 24.41" 经度: 118° 48' 11.97" 图片宽度: 160 pixels 图片高度: 112 pixels 经纬度转换之后
纬度 : 31° 58' 24.41" 纬度(度分秒格式) : 31.97344722222222 经度: 118° 48' 11.97" 经度(度分秒格式): 118.803325