一、引入依赖
<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;
}
}