最近看見一篇報道“你與陌生人之間,可能只是一張照片的距離。有時候一張 “原圖”照片,分分鐘就暴露了你的信息……”。如今,任何智能手機拍攝的照片,都含有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
//地址信息
省:安徽省
市:黃山市
區:歙縣
地址:朋悅旅館