springboot项目java解析获取图片的详细信息
一、引入依赖
<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.16.0</version></dependency>
二、工具类
public class ImageExifDto{private Double lng;private Double lat;private Double alt;private String dateTime;}
import cn.hutool.core.util.Strutil;import com.drew.imaging. ImageMetadataReader; import com.drew.metadata.Directory;import com.drew.metadata.Metadata; import com.drew.metadata.Tag;import com.google.common.collect.Maps;import com.wol.shiju.common.dto.domain.ImageExifDto;import io.swagger.annotations.ApiModel;import java.io.File; import java.util.Map; @ApiModel(value = “解析图片详细信息”) public class ImageExifutil {public static voidi main(String[] args) throws Exception{}public static void showImageInformation(String imageUrl) throws Exception{ String imgDir = "D:\\kiki\\imgs"; File[] files = new File(imageUrl).listFiles(); for (File file : files) { if (!file.getName().endsWith(".jpg")) { continue; } System.out.println("----------------------------------------\n" + file.getName()); // 获取照片信息 Map exifMap = readPicExifInfo(file); // 打印照片信息 ImageExifDto imageExifDto = printPicExifInfo(exifMap); System.out.println(imageExifDto); } }public static ImageExifDto getImageDto(String imageUrl) throws Exception{File file = new File(imageUrl);if(file.getName().endswith(".jpg")){Map exifMap = readpicExifInfo(file); raturn printpicexifInfo(exifMap);}else{return new ImageExifoto():}}public static Map<String, String> readPicExifInfo(File file) throws Exception{ Map<String, String> map = Maps.newLinkedHashMap<>(); Metadata metadata = ImageMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { // 输出所有属性 System.out.format( "[%s] - %s = %s\n", directory.getName(), tag.getTagName(), tag.getDescription()); map.put(tag.getTagName(), tag.getDescription()); } if (directory.hasErrors()) { for (String error : directory.getErrors()) { System.err.format("ERROR: %s", error); } } } return map;}public static ImageExifDto printPicExifInfo(Map<String,String> map){String[] strings = new string[]{"GPS Version ID","GPS Latitude","GPS Longitude","GPS Altitude", "Date/Time"}String[] names = new string[]{"版本","经度","纬度","高度","UTC时间截","gps日期","拍摄时间"};for(int i = 0;i < strings.length;i++){ if(map.containskey(strings[i])){if ("GPS Latitude".equals(strings[i])){dto.setLat(LatLng2DecimaL(map.get(strings[i]))); }else if("GPS Longitude".endswith(strings[i)){dto.setLng(LatLng2Decimal(map.get(strings[i))));}else if("GPS Altitude".equals(strings(i]){dto.setAlt(Double.valueOf(StrUtil.subBefore(map.get(strings[i]),"metres",true)));}}}}public static double latLng2Decimal(String gps) { String a = gps.split("°")[0].replace(" ", ""); String b = gps.split("°")[1].split("'")[0].replace(" ", ""); String c = gps.split("°")[1].split("'")[1].replace(" ", "").replace("\"", ""); double gps_dou = Double.parseDouble(a) + Double.parseDouble(b) / 60 + Double.parseDouble(c) / 60 / 60; return gps_dou;}}