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;
	}

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕木兮人可

感谢支持,勿忘初心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值