关于java:照片也能实现定位以后不要轻易发图了

32次阅读

共计 4279 个字符,预计需要花费 11 分钟才能阅读完成。

事件起因

凭借多年吃瓜教训,花 Gie 感觉很不对劲,果决让二狗等我片刻。

啪啪啪 ….Two hours later

一通代码乱敲,紧急写了 二十行代码,对照片进行了一通剖析。

public static void main(String[] args) throws JpegProcessingException, IOException {PicAnalysis("C:\\Users\\86157\\Desktop\\123.jpg");
}
public static  void PicAnalysis(String path) throws JpegProcessingException, IOException {System.out.println("弱小的语言正在辨认图片地址...");
    File picFile = new File(path);
    Metadata metadata = JpegMetadataReader.readMetadata(picFile);
    Iterator<Directory> it = metadata.getDirectories().iterator();
    while (it.hasNext()) {Directory exif = it.next();
        Iterator<Tag> tags = exif.getTags().iterator();
        while (tags.hasNext()) {Tag tag = tags.next();
            System.out.println(tag);
        }
    }
    System.out.println("图片剖析结束!");
}

拿到后果如下:

拍摄工夫:2021:07:08 20:07:36
拍摄地点:上海市黄浦区外滩街道七重天宾馆
手机型号:HUAWEI SEA-AL10
    
{"status": "1", "regeocode": { "addressComponent": { "city": [], "province": "上海市", "adcode": "310101", "district": "黄浦区", "towncode": "310101013000", "streetNumber": {"number": "406- 1 号", "location": "121.485570,31.240797", "direction": "西南", "distance": "2.35113", "street": "江西中路"}, "country": "中国", "township": "外滩街道", "businessAreas": [{ "location": "121.480979,31.245711", "name": "七浦路", "id": "310106"}, {"location": "121.503076,31.252427", "name": "北外滩", "id": "310109"}, {"location": "121.502898,31.252714", "name": "提篮桥", "id": "310109"} ], "building": {"name": "上海市物流学会(江西中路)", "type": "科教文化服务; 科研机构; 科研机构" }, "neighborhood": {"name": [], "type": []}, "citycode": "021" }, "formatted_address": "上海市黄浦区外滩街道七重天宾馆" }, "info": "OK", "infocode": "10000" }

这 …..,好家伙,后果还好,人没事,地点也挺正规的,这下二狗应该不必放心平安问题,能够一块去喝酒了。

实际出真知

看到这里,平时深信不疑的小伙伴是不是蠢蠢欲动了呢,上面我就来拆分几步走。

  • 剖析图片

首先,引入一个 jar 包

 <dependency>
     <groupId>com.drewnoakes</groupId>
     <artifactId>metadata-extractor</artifactId>
     <version>2.16.0</version>
 </dependency>

而后写一个办法,获取图片中的详细信息,包含 拍摄工夫 地位信息 手机型号 等,是不是感觉信息时代也挺可怕的,个人隐私时刻透露中 …

// 剖析图片获取地址
public static  Map<String,String> PicAnalysis(String path) throws JpegProcessingException,         IOException {Map<String,String> map = new HashMap();
    System.out.println("弱小的语言正在辨认图片地址...");
    File picFile = new File(path);
    Metadata metadata = JpegMetadataReader.readMetadata(picFile);
    Iterator<Directory> it = metadata.getDirectories().iterator();
    while (it.hasNext()) {Directory exif = it.next();
        Iterator<Tag> tags = exif.getTags().iterator();
        while (tags.hasNext()) {Tag tag = tags.next();
            map.put(tag.getTagName(),tag.getDescription());
            System.out.println(tag.getTagName() + ":" +tag.getDescription());
        }
    }
    System.out.println("图片剖析结束!");
    return map;
}

该办法会返回如下信息,相当多,这里整顿成表格:

参数 阐明
Make 产品生产厂家
Model 设施型号
Orientation 方向
X Resolution/Y Resolution X/ Y 方向分辨率
ResolutionUnit 分辨率单位
DateTime 日期和工夫
Software 软件版本
ISO speed ratings 感光度
Date/Time Original 创立工夫
Date/Time Digitized 数字化工夫
Components Configuration 图像结构(多指色调组合计划)
Compressed Bits Per Pixel 压缩时每像素色调位 指压缩水平
Exposure Bias Value 曝光弥补
Max Aperture Value 最大光圈
Metering Mode 测光形式,均匀式测光、地方重点测光、点测光等
Flash 是否应用闪光灯
Focal Length 焦距,个别显示镜头物理焦距
Makernote 作者标记、阐明、记录
Color Space 色域、色调空间
Exif Image Width 图像宽度,指横向像素数
Exif Image Height 图像高度,指纵向像素数
  • 转换成坐标

从图片中拿出的信息为度分秒格局:即30° 14'32.52",咱们须要将其转换为经纬度:如121.485559,31.240778,代码如下:

public static String translate(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 = Double.parseDouble(a)+Double.parseDouble(b)/60 + Double.parseDouble(c)/60/60;
    return String.valueOf(gps);
}
  • 揭开最终面纱

获取到具体坐标后,这间隔胜利只有半步之遥,接下来调用高德地图的 Api 来获取具体地址。

 public static void getAddress(Map<String,String> param){String str = RequestUtils.sendGet("https://restapi.amap.com/v3/geocode/regeo", "key=5a3c45fd68d04bbc&location="+translate(param.get("GPS Longitude"))+","+translate(param.get("GPS Latitude")));
        JSONObject result = JSON.parseObject(str);
        System.out.println("拍摄工夫:" +param.get("Date/Time"));
        System.out.println("拍摄地点:" +result.getJSONObject("regeocode").getString("formatted_address"));
        System.out.println("手机型号:" +param.get("Make") +"" + param.get("Model"));
        System.out.println(str);
    }

不过咱们首先要进入高德地图开发者平台,没有申请集体开发者身份的须要先进行申请,申请步骤比较简单,申请后每天会有指定数量的收费调用次数,足够集体应用。

懒人的玩法

如果感觉太麻烦,不想申请开发者,哎,就是玩,就是不想申请,那花 Gie 也有手动版做法。

  • 手动转换经纬度

关上网址 http://www.minigps.net/fc.html,能够在线将度分秒格局转换成经纬度。

  • 手动定位坐标

关上拾取坐标零碎,输出上一步失去的经纬度,就能够查看到具体地址

git 地址

我的项目会上传至 git,有趣味的小伙伴能够拉下来试试,地址为:https://github.com/zsh5775317…

最初

最初廓清一下,二狗至今独身,哪有什么坏心理,又怎么会有女朋友,本故事纯属虚构,如有雷同,emmm….. 再见。

点关注,防走丢

以上就是本期全部内容,如有纰漏之处,请留言指教,非常感谢。我是花 Gie,有问题大家随时留言探讨,咱们下期见🦮。

文章继续更新,能够微信搜一搜 Java 开发零到壹 第一工夫浏览,并且能够获取 面试材料学习视频 等,有趣味的小伙伴欢送关注,一起学习,一起哈🐮🥃。

原创不易,你怎忍心白嫖 ,如果你感觉这篇文章对你有点用的话,感激老铁为本文 点个赞、评论或转发一下,因为这将是我输入更多优质文章的能源,感激!

正文完
 0