当前位置: 首页 > 后端技术 > Java

通过Java技术,看看你有没有被绿过...

时间:2023-04-01 15:09:20 Java

今天早上看到CSDN推荐的Python让女朋友发加班照片,定位酒店笑话。本来打算验证一下,顺便实践一下,为了实践,最后pipinstalljson报告安装后没有指定版本号。一怒之下,做了我的大JAVA,验证了可行性和场景的遐想。话不多说,先上硬货。依赖导入是博文中的exifread模块。找到了我大java对应的jar,找到了metadata-extractor,官方还在更新中。最新的罐子是今年的。这个元数据提取jar很强大,还支持视频信息的提取。看看官方介绍:你看到了吗?第一个例子是为了支持我的大JAVA而写的。同时作为工单,大肝。com.drewnoakesmetadata-extractor2.16.0准备工作1.打开GPS2,百度地图,北斗伙伴已验证说明已连接GPS定位3.设置手机相机打开位置信息4.拍照并查看照片详情。在这里,您必须确保您拍摄的照片的详细信息具有经纬度信息。如果没有,您可以定位您的手机。在CSDN搜索如何设置。对了,CSDN的浏览器插件真香。简直是我们技术人员的福音。不用担心一定程度的广告,让你找东西吃力,而且包容性很强,可以时不时的选择自己喜欢的搜索引擎。这里的sampledemo首先演示了这个metadataextractionjar可以提取的信息,顺便把获取到的经纬度通过百度传给地址。因为是demo,没有业务,所以我这里直接在测试类中进行。没有业务,不涉及机密,可以使用完整代码。我不会介绍SpringBoot的基础知识。推荐这个实用教程:https://www.javastack.cn/cate...packagecom.easylinkin.bm.extractor;importcom.alibaba.fastjson.JSONObject;importcom.drew.imaging.ImageMetadataReader;importcom.drew.imaging.ImageProcessingException;导入com.drew.metadata.Directory;导入com.drew.metadata.Metadata;导入com.drew.metadata.Tag;导入com.easylinkin.bm.util。HttpUtils;importlombok.extern.slf4j.Slf4j;importjava.io.File;importjava.io.IOException;/***@authorzhengwen**/@Slf4jpublicclassImgTestCode{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile("C:\\Users\\zhengwen\\Desktop\\test\\IMG_20210820_093958.jpg");读取图像信息(文件);}/***从照片中提取信息**@paramfile照片文件*@throwsImageProcessingException*@throwsException*/privatestaticvoidreadImageInfo(Filefile)throwsImageProcessingException,Exception{Metadatametadata=ImageMetadataReader.readMetadata(文件);System.out.println("---打印所有细节---");for(Directorydirectory:metadata.getDirectories()){for(Tagtag:directory.getTags()){System.out.format("[%s]-%s=%s\n",directory.getName(),tag.getTagName(),tag.getDescription());}if(directory.hasErrors()){for(Stringerror:directory.getErrors()){System.err.format("ERROR:%s",error);}}}System.out.println("--打印公共信息---");双纬度=空;双lng=空;for(Directorydirectory:metadata.getDirectories()){for(Tagtag:directory.getTags()){StringtagName=tag.getTagName();//标签名称Stringdesc=tag.getDescription();//标签信息if(tagName.equals("ImageHeight")){System.err.println("Imageheight:"+desc);}elseif(tagName.equals("ImageWidth")){System.err.println("ImageWidth:"+desc);}elseif(tagName.equals("Date/TimeOriginal")){System.err.println("Timetaken:"+desc);}elseif(tagName.equals("GPSLatitude")){System.err.println("Latitude:"+desc);System.err.println("纬度(度分秒格式):"+pointToLatlong(desc));lat=latLng2Decimal(desc);}elseif(tagName.equals("GPSLongitude")){System.err.println("Longitude:"+desc);System.err.println("经度(度分秒格式):"+pointToLatlong(desc));lng=latLng2Decimal(desc);}}}System.err.println("--经纬度转账地址--");//经纬度转换为楼主使用百度apiconvertGpsToLoaction(lat,lng);}/***经纬度格式转换为度分秒格式。如果需要,可以调用这个方法转换**@param点坐标点*@return*/publicstaticStringpointToLatlong(Stringpoint){Doubledu=Double.parseDouble(point.substring(0,point.indexOf("°")).trim());双芬=Double.parseDouble(point.substring(point.indexOf("°")+1,point.indexOf("'")).trim());doublemiao=Double.parseDouble(point.substring(point.indexOf("'")+1,point.indexOf("\"")).trim());DoubleduStr=du+fen/60+miao/60/60;returnduStr.toString();}/****经纬度坐标格式转换(*°转十进制格式)*@paramgps*/publicstaticdoublelatLng2Decimal(Stringgps){Stringa=gps.split("°")[0].replace("","");Stringb=gps.split("°")[1].split("'")[0].replace("","");Stringc=gps.split("°")[1].split("'")[1].replace("","").replace("\"","");doublegps_dou=Double.parseDouble(a)+Double.parseDouble(b)/60+Double.parseDouble(c)/60/60;returngps_dou;}/***api_key:注册的百度api的key*coords:经纬度坐标*http://api.map.baidu.com/reverse_geocoding/v3/?ak="+api_key+"&output=json&coordtype=wgs84ll&location="+coords*

*经纬度转换地址信息**@paramgps_latitude维度*@paramgps_longitude精度*/privatestaticvoidconvertGpsToLoaction(doublegps_latitude,doublegps_longitude)throwsIOException{StringapiKey="YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra";Stringres="";Stringurl="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);JSONObjectobject=JSONObject.parseObject(res);if(object.containsKey("result")){JSONObjectresult=object.getJSONObject("result");if(result.containsKey("addressComponent")){JSONObject地址=object.getJSONObject("重新sult").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"));}}}}控制台打印:下面贴出详细内容:com.easylinkin.bm.extractor.ImgTestCode---打印全部详情---[JPEG]-CompressionType=Baseline[JPEG]-Data精度=8位[JPEG]-图像高度=4032像素[JPEG]-图像宽度=3024像素[JPEG]-分量数=3[JPEG]-分量1=Y分量:量化表0,采样因子2水平/2vert[JPEG]-分量2=Cb分量:量化表1,采样因子1horiz/1vert[JPEG]-分量3=Cr分量:量化表1,采样因子1horiz/1vert[ExifIFD0]-日期/Time=2021:08:2009:39:58[ExifIFD0]-型号=YOTAY3[ExifIFD0]-YCbCrPositioning=像素阵列的中心[ExifIFD0]-分辨率单位=英寸[ExifIFD0]-Y分辨率=每英寸72点[ExifIFD0]-X分辨率=每英寸72点[ExifIFD0]-Make=YOTA[GPS]-GPS日期戳=2021:08:20[GPS]-GPS高度参考=海平面以下[GPS]-GPS经度参考=E[GPS]-GPS经度=114°24'9.61[GPS]-GPS处理方法=ASCII[GPS]-GPS纬度参考=N[GPS]-GPS时间戳=01:39:46.000UTC[GPS]-GPS高度=21米[GPS]-GPS纬度=30°28'40.67"[ExifSubIFD]-色彩空间=sRGB[ExifSubIFD]-F数=f/1.9[ExifSubIFD]-日期/时间数字化=2021:08:2009:39:58[ExifSubIFD]-焦距=3.9mm[ExifSubIFD]-光圈值=f/1.9[ExifSubIFD]-曝光模式=自动曝光[ExifSubIFD]-亚秒时间数字化=819350[ExifSubIFD]-Exif图像高度=4032像素[ExifSubIFD]-焦距35=23毫米[ExifSubIFD]-场景捕捉类型=标准[ExifSubIFD]-亚秒时间原始=819350[ExifSubIFD]-曝光程序=未知(0)[ExifSubIFD]-白平衡模式=自动白平衡[ExifSubIFD]-Exif图像宽度=3024像素[ExifSubIFD]-亚秒时间=819350[ExifSubIFD]]-快门速度值=1/1022秒[ExifSubIFD]-测光模式=中心加权平均[ExifSubIFD]-日期/时间原始=2021:08:2009:39:58[ExifSubIFD]-组件配置=YCbCr[ExifSubIFD]-Exif版本=2.20[ExifSubIFD]-闪光灯=闪光灯未闪光[ExifSubIFD]-亮度值=0.0[ExifSubIFD]-ISO速度等级=103[ExifSubIFD]-感应方法=单芯片颜色区域传感器[ExifSubIFD]-FlashPix版本=1.00[ExifSubIFD]-曝光时间=1/1023秒[互操作性]-互操作性指数=推荐的Exif互操作性规则(ExifR98)[互操作性]-互操作性版本=1.00[Exif缩略图]-Y分辨率=每英寸72点[Exif缩略图]-缩略图长度=21538字节[Exif缩略图]-缩略图nailOffset=959bytes[ExifThumbnail]-Compression=JPEG(old-style)[ExifThumbnail]-ResolutionUnit=Inch[ExifThumbnail]-XResolution=72dotsperinch[霍夫曼]-表数=4个霍夫曼表[文件类型]-检测到的文件类型名称=JPEG[文件类型]-检测到的文件类型长名称=联合图像专家组[文件类型]-检测到的MIME类型=image/jpeg[文件类型]-预期的文件扩展名=jpg[File]-FileName=IMG_20210820_093958.jpg[File]-FileSize=5215044bytes[File]-FileModifiedDate=FridayAugust2009:39:59+08:002021--打印公共信息---初始化HttpClientTest~~~起始图像高度:4032像素图像宽度:3024像素经度:114°24'9.61"经度(度分秒格式):114.40266944444446纬度:30°28'40.67"纬度(度分秒格式):30.477963888888887拍摄time:2021:08:2009:39:58--经纬度传输地址--【url】http://api.map.baidu.com/reverse_geocoding/v3/?ak=YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra&output=json&coordtype=wgs84ll&location=30.47796388488888初始化HttpClientTest~~~拍摄结束地址:中国湖北省武汉市洪山区软件园路关山路。关山,光谷大世界。英语,或检查API以查看打印了哪些其他文件。我不会演示它。如果你有兴趣,你可以自己尝试一下。我先把我百度地图的AK放在这里,方便大家验证,免得说我骗人,反正我是免费用的。最后说一句,图片要么压缩成压缩包再发,要么用数据线从手机里复制过来。我这里先用微信发了,基本所有信息都抹掉了(在电脑上查看图片详情,其实可以看到经纬度信息)。还有,我有一部苹果手机,居然可以拍出带有地理位置信息的照片。您需要在隐私中打开位置并对相机进行授权。总结和推导思路怎么说还是很不错的。如果用在我们的工作中,我们认为它可以代替我们以前做的现场检查。当您到达验货地点时,请拍照并与机器代码进行匹配。你不怕你会让别人帮你拍照。还有正式考勤表、实地工作等。另外,我还想到了孩子们出门喜欢拍照,把你的照片放在云存储上,如果有无良服务商,他们基本上可以通过你上传照片的时间来映射你的轨迹。..好吧,这将在这里分享。其实这里最大的感受就是不知道A,就不会想到B。如果早知道图片可以携带的信息,或者相机软件可以获取的信息,也许我就可以做到关于它的一些事情。.....