准备
1,在手机的相机里面设置打开位置信息,然后拍摄一张图片备用。
2,将手机拍摄的图片上传到电脑上面,需要注意的是微信,QQ接收的话需要先压缩图片然后在发送(防止图片信息发生变化)。
3,创建springboot项目,jdk8,idea,电脑联网状态(这里解析经纬度是通过百度的api)。
直接上代码
依赖引入

<dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.16.0</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.53</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope>
</dependency>

GpsUtile工具类
经纬度格式化

/*** @author lipeng* @date 2021/11/4 10:56*/
public class GpsUtil {/*** 经纬度格式  转换为  度分秒格式** @param point 坐标点* @return duStr*/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();}/**** 经纬度坐标格式转换(* °转十进制格式)* @param gps* @return gps_dou*/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;}
}

ImgUtil类
文件详细信息读取
经纬度解析成详细地址

import com.alibaba.fastjson.JSONObject;
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/*** @author lipeng* @date 2021/11/4 10:26*/
public class ImgUtil {// 读取图片的全部信息public static void readImgAll(File file) throws ImageProcessingException, IOException {Metadata metadata = ImageMetadataReader.readMetadata(file);System.out.println("---打印全部详情---");for (Directory directory : metadata.getDirectories()) {for (Tag tag : directory.getTags()) {System.out.format("[%s] - %s = %s\n",directory.getName(), tag.getTagName(), tag.getDescription());}if (directory.hasErrors()) {for (String error : directory.getErrors()) {System.err.format("ERROR: %s", error);}}}}// 读取图片的常用信息,并将信息封装到集合里面public static Map readImgNormal(File file) throws ImageProcessingException, IOException {Metadata metadata = ImageMetadataReader.readMetadata(file);Map<String,String> map = new HashMap<>();for (Directory directory : metadata.getDirectories()) {for (Tag tag : directory.getTags()) {String tagName = tag.getTagName();  //标签名String desc = tag.getDescription(); //标签信息if (tagName.equals("Image Height")) {map.put("imgHeigh" , desc);} else if (tagName.equals("Image Width")) {map.put("imgWeith" , desc);} else if (tagName.equals("Date/Time Original")) {map.put("time" , desc);} else if (tagName.equals("GPS Latitude")) {map.put("lat" , GpsUtil.pointToLatlong(desc));} else if (tagName.equals("GPS Longitude")) {map.put("log" , GpsUtil.pointToLatlong(desc));}}}return map;}/*** api_key:注册的百度api的key* coords:经纬度坐标* http://api.map.baidu.com/reverse_geocoding/v3/?ak="+api_key+"&output=json&coordtype=wgs84ll&location="+coords* <p>* 经纬度转地址信息** @param lat  维度* @param log 精度* @return add 地址*/public static Map parseAdd(String log, String lat) throws IOException {Map<String,String> adress = new HashMap<>();String apiKey = "YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra";//lat 小  log  大//参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)String urlString = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=" + apiKey + "&output=json&coordtype=wgs84ll&location=" + (lat + "," + log);String res = "";try {URL url = new URL(urlString);java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));String line;while ((line = in.readLine()) != null) {res += line+"\n";}in.close();} catch (Exception e) {System.out.println("error in wapaction,and e is " + e.getMessage());}JSONObject object = JSONObject.parseObject(res);if (object.containsKey("result")) {JSONObject result = object.getJSONObject("result");if (result.containsKey("addressComponent")) {JSONObject addressObj = object.getJSONObject("result").getJSONObject("addressComponent");adress.put("country", (String) addressObj.get("country"));adress.put("province", (String) addressObj.get("province"));adress.put("city", (String) addressObj.get("city"));adress.put("district", (String) addressObj.get("district"));adress.put("street", (String) addressObj.get("street"));}}else {adress = null;}return adress;}// 将图片里面的经纬度通过百度地图的api解析成详细的地址public static Map parseAddByImg(File file) throws ImageProcessingException, IOException {Map map = readImgNormal(file);String lat = (String) map.get("lat");String log = (String) map.get("log");return parseAdd(log,lat);}
}

测试

import com.drew.imaging.ImageProcessingException;
import com.lp.img_gps.util.ImgUtil;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.Map;
/*** @author lipeng* @date 2021/11/4 10:53*/
public class ImgTest {private File file = new File("C:\\Users\\TY\\Desktop\\daskImage\\临时\\test.jpg");@Testpublic void readImgAllTest() throws ImageProcessingException, IOException {ImgUtil.readImgAll(file);}@Testpublic void readImgNormalTest() throws ImageProcessingException, IOException {Map map = ImgUtil.readImgNormal(file);System.out.println(map);}@Testpublic void parseAdd() throws IOException {Map add = ImgUtil.parseAdd("116.3039", "39.97646");System.out.println(add);}@Testpublic void parseAddByImg() throws ImageProcessingException, IOException {Map add = ImgUtil.parseAddByImg(file);System.out.println(add);}
}

Java获取图片的拍摄地理位置相关推荐

  1. JAVA获取图片的宽、高和大小

    JAVA获取图片的宽.高.大小 如果是本地磁盘文件 File file = new File("C:\\Users\\root\\Desktop\\test.jpg");Buffe ...

  2. java获取图片的长宽尺寸(毫米)

    java获取图片的长宽尺寸(毫米) 现在有个需求是附上 附件图片,同时要标注图片的一些属性,比较麻烦的要标识图片的长宽尺寸(毫米),网上找了半天都是获取图片的长宽像素,但是想了想 图片的长宽尺寸不应该 ...

  3. java 图片宽高_[Java]获取图片高和宽

    通过javax.imageio.ImageIO类中的read()函数读取的图片,存放在类java.awt.image.BufferedImage类中.调用BufferedImage类中的getWidt ...

  4. java获取图片的大小和尺寸(本地 服务器)

    java获取图片的大小和尺寸,有两种获取的源,一种是读取本地的图片获取大小和尺寸,一种是通过服务器上图片的地址获取图片的尺寸!下面整理出这两种方式的简易代码,希望帮助的大家和自己! 我使用的Juint ...

  5. java 获取图片的宽高

    博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): 通过java获取图片的宽高 获取本地文件的图片尺寸: import java.awt.image.BufferedIma ...

  6. Java获取图片||图标

    一:java获取图标 图标:大小小,不占大部分内存,用于Swing组件类,按键旁,表格里,加以修饰形容,达到使得界面更美观的效果 public static Icon getIcon(String n ...

  7. Java获取图片的RGB值(数字图像处理)

    Java获取图片的RGB值(数字图像处理) 一:简介 RGB即是代表红.绿.蓝三个通道的颜色.我们知道大多数的颜色都是由这3种颜色所组成,下面我们将演示使用Java获取到图片中的RGB值,并且输出: ...

  8. 手把手教你利用Java获取图片GPS信息

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 推荐:https://www.xttblog.com/?p=5251 一张图片能包含很多敏感信息, ...

  9. Java获取图片RGB值

    前言 图片对比获取坐标的方法很多,我选择了比较简单的方法:对比rgb值.要想对比rgb值,就得先获取图片的rgb值.运用的是BufferedImage里的getRGNB方法. 解决方案 首先用.get ...

最新文章

  1. 使用Dom4j操作XML数据
  2. 明明表中有这个索引,但mysql的force index 无效?
  3. http 请求 与其同步与异步请求的通透讲解
  4. oracle排名怎么去除空值影响,Oracle排序中常用的NULL值处理方法
  5. oracle在日本遇到的技术问题
  6. spring boot 使用application.properties 进行外部配置
  7. Nowcoder 提高组练习赛-R2
  8. 程序流程图N-S图PAD图
  9. 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
  10. Android源码文件夹结构
  11. HTTP Header中的内容(请求Header、响应Header)
  12. 数学建模之线性规划问题(含整数规划和0-1规划)
  13. 最严谨的计算机语言p,一款全新的 高级PLC编程语言 P语言 简介-专业自动化论坛-中国工控网论坛...
  14. 认认真真推荐几个清华学霸的公众号!
  15. 10分钟搞定miniconda-python环境安装
  16. 软件项目测试流程的规划
  17. UEdit 使用总结
  18. 漏洞修复需要升级打补丁,打补丁准备工作
  19. 【微搭低代码】美业小程序官方模板练习-绘制原型
  20. 刷题记录——动态规划

热门文章

  1. 抖音数据化运营可以分为4个大的模块
  2. (一)验证微信公众平台
  3. 如何写期望薪资、离职原因、求职意向?
  4. tomcat版本和支持的jdk版本匹配表
  5. 解除Windows 10休眠时自动唤醒设置
  6. 安卓 OpenGLES 魔方
  7. 计算机系统保护怎么打开,Win7系统开启DEP数据执行保护的具体方法
  8. python运动场地预约系统毕业设计开题报告
  9. php 输出等腰三角形,C语言输出等腰三角形
  10. 云端极简部署Svelte3聊天室