最近看见一篇报道“你与陌生人之间,可能只是一张照片的距离。有时候一张 “原图”照片,分分钟就暴露了你的信息……”。如今,任何智能手机拍摄的照片,都含有Exif参数,可以调用GPS全球定位系统数据,在照片中记录下位置、时间等信息。当用户把原始图片发送给其他人时,所附带的信息也一并发出去了。无论用微信、短信、邮件,抑或是其他传输工具,都是如此。
下面我们就来看看如何来获取通过一张图片来获取拍摄地点:
- 使用metadata-extractor包实现图片详细信息提取。(主要是为了获取经纬度)
- 利用经纬度调用阿里云地图api来获取地址信息。
- 利用alibaba封装的fastjson来解析数据。
package com.kevin.method.file
import java.io.File
import java.net.URL
import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.JSONArray
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
public class GetPicProperties {
public static void main(String[] args) throws Exception, Exception{
File file = new File("F:\\Pictures\\黄山行\\IMG_20170402_143927.jpg")
printImageTags(file)
}
private static void printImageTags(File file) throws ImageProcessingException, Exception{
Metadata metadata = ImageMetadataReader.readMetadata(file)
String lat=""
String log=""
for (Directory directory : metadata.getDirectories()) {
for (Tag tag : directory.getTags()) {
String tagName = tag.getTagName()
String desc = tag.getDescription()
System.out.println(tagName+" "+desc)
if (tagName.equals("GPS Latitude")) {
lat = pointToLatlong(desc)
} else if (tagName.equals("GPS Longitude")) {
log = pointToLatlong(desc)
}
}
}
String add = getAdd(log, lat)
JSONObject jsonObject = JSON.parseObject(add)
JSONArray jsonArray = jsonObject.getJSONArray("addrList")
JSONObject jso = jsonArray.getJSONObject(0)
String allAdd = jso.getString("admName")
String arr[] = allAdd.split(",")
String adds = jso.getString("name")
System.out.println("省:"+arr[0]+"\n市:"+arr[1]+"\n区:"+arr[2]+"\n"+adds)
}
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()
}
public static String getAdd(String log, String lat ){
//参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
String urlString = "http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+log+"&type=010"
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())
}
// System.out.println(res)
return res
}
}
Compression Type Baseline
Data Precision 8 bits
Image Height 2340 pixels
Image Width 4160 pixels
Number of Components 3
Component 1 Y component: Quantization table 0, Sampling factors 2 horiz/2 vert
Component 2 Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
Component 3 Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert
Exposure Time 1/1236 sec
F-Number F2
Exposure Program Unknown program (0)
ISO Speed Ratings 100
Exif Version 2.20
Date/Time Original 2017:04:02 14:39:27
Date/Time Digitized 2017:04:02 14:39:27
Components Configuration YCbCr
Shutter Speed Value 1/1235 sec
Aperture Value F2
Brightness Value 7.43
Metering Mode Center weighted average
Flash Flash did not fire, auto
Focal Length 4.12 mm
Sub-Sec Time 477109
Sub-Sec Time Original 477109
Sub-Sec Time Digitized 477109
FlashPix Version 1.00
Color Space sRGB
Exif Image Width 4160 pixels
Exif Image Height 2340 pixels
Sensing Method One-chip color area sensor
Scene Type Directly photographed image
Exposure Mode Auto exposure
White Balance Mode Auto white balance
Focal Length 35 30mm
Scene Capture Type Standard
Make Xiaomi
Model Mi-4c
X Resolution 72 dots per inch
Y Resolution 72 dots per inch
Resolution Unit Inch
Software libra-user 5.1.1 LMY47V V8.2.1.0.LXKCNDL release-keys
Date/Time 2017:04:02 14:39:27
YCbCr Positioning Center of pixel array
Interoperability Index Recommended Exif Interoperability Rules (ExifR98)
Interoperability Version 1.00
GPS Altitude Ref Sea level
GPS Latitude Ref N
GPS Latitude 29.0° 52.0' 3.24970000000377"
GPS Longitude Ref E
GPS Longitude 118.0° 25.0' 49.81550000001107"
GPS Altitude 141 metres
GPS Time-Stamp 6:39:27 UTC
GPS Processing Method ASCII
GPS Date Stamp 2017:04:02
Thumbnail Compression JPEG (old-style)
X Resolution 72 dots per inch
Y Resolution 72 dots per inch
Resolution Unit Inch
Thumbnail Offset 1052 bytes
Thumbnail Length 32357 bytes
//地址信息
省:安徽省
市:黄山市
区:歙县
地址:朋悦旅馆