通过Java 技术手段,检查你自己是不是被绿了,Java进阶之光

4、拍照一张顺便查看照片详情

这里一定要确定拍的照片的详情时有经纬度信息的,如果没有,你针对你的手机在CSDN里搜索下怎么设置。这里顺便提下,CSDN的浏览器插件真香。简直就是我们技术人事的福音,再以不用担心某某度的广告之类导致找东西费劲了,而且它很包容,还时可以选择自己喜欢的搜索引擎的。

示例demo


这里先演示这个元数据提取jar能提取到的信息,顺便把取到的经纬度通过百度转地址。

因为是demo,没有业务,我这里就直接在测试类里干了。没有什么业务,不涉及什么机密,可以上全码。

Spring Boot 基础就不介绍了,推荐下这个实战教程: https://www.javastack.cn/categories/Spring-Boot/

package com.easylinkin.bm.extractor;

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 com.easylinkin.bm.util.HttpUtils;

import lombok.extern.slf4j.Slf4j;

import java.io.File;

import java.io.IOException;

/**

  • @author zhengwen

**/

@Slf4j

public class ImgTestCode {

public static void main(String[] args) throws Exception {

File file = new File(“C:\Users\zhengwen\Desktop\test\IMG_20210820_093958.jpg”);

readImageInfo(file);

}

/**

  • 提取照片里面的信息

  • @param file 照片文件

  • @throws ImageProcessingException

  • @throws Exception

*/

private static void readImageInfo(File file) throws ImageProcessingException, Exception {

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

}

}

}

System.out.println(“–打印常用信息—”);

Double lat = null;

Double lng = null;

for (Directory directory : metadata.getDirectories()) {

for (Tag tag : directory.getTags()) {

String tagName = tag.getTagName(); //标签名

String desc = tag.getDescription(); //标签信息

if (tagName.equals(“Image Height”)) {

System.err.println("图片高度: " + desc);

} else if (tagName.equals(“Image Width”)) {

System.err.println("图片宽度: " + desc);

} else if (tagName.equals(“Date/Time Original”)) {

System.err.println("拍摄时间: " + desc);

} else if (tagName.equals(“GPS Latitude”)) {

System.err.println("纬度 : " + desc);

System.err.println("纬度(度分秒格式) : " + pointToLatlong(desc));

lat = latLng2Decimal(desc);

} else if (tagName.equals(“GPS Longitude”)) {

System.err.println("经度: " + desc);

System.err.println("经度(度分秒格式): " + pointToLatlong(desc));

lng = latLng2Decimal(desc);

}

}

}

System.err.println(“–经纬度转地址–”);

//经纬度转地主使用百度api

convertGpsToLoaction(lat, lng);

}

/**

  • 经纬度格式 转换为 度分秒格式 ,如果需要的话可以调用该方法进行转换

  • @param point 坐标点

  • @return

*/

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

*/

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© / 60 / 60;

return gps_dou;

}

/**

  • api_key:注册的百度api的key

  • coords:经纬度坐标

  • http://api.map.baidu.com/reverse_geocoding/v3/?ak=“+api_key+”&output=json&coordtype=wgs84ll&location="+coords

  • 经纬度转地址信息

  • @param gps_latitude 维度

  • @param gps_longitude 精度

*/

private static void convertGpsToLoaction(double gps_latitude, double gps_longitude) throws IOException {

String apiKey = “YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra”;

String res = “”;

String url = “http://api.map.baidu.com/reverse_geocoding/v3/?ak=” + apiKey + “&output=json&coordtype=wgs84ll&location=” + (gps_latitude + “,” + gps_longitude);

System.err.println(“【url】” + url);

res = HttpUtils.httpGet(url);

JSONObject object = JSONObject.parseObject(res);

if (object.containsKey(“result”)) {

JSONObject result = object.getJSONObject(“result”);

if (result.containsKey(“addressComponent”)) {

JSONObject address = object.getJSONObject(“result”).getJSONObject(“addressComponent”);

System.err.println(“拍摄地点:” + address.get(“country”) + " " + address.get(“province”) + " " + address.get(“city”) + " " + address.get(“district”) + " "

  • address.get(“street”) + " " + result.get(“formatted_address”) + " " + result.get(“business”));

}

}

}

}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

QL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下**

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

[外链图片转存中…(img-v0NPUrKh-1711195732615)]

[外链图片转存中…(img-oqzVBNpz-1711195732615)]

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值