需求分析:今天碰到一个小朋友,想查看女朋友的照片拍摄位置是不是和她所诉说的一致 ^_^
在实现之前先了解一些小知识。
什么是Exif,什么又是元数据?
EXIF(Exchangeable Image File)是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。
现在就开始说提取的方法啦(提取的前提是图片要有信息才可以的哦)
1、准备工作,引入相关jar文件。
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.12.0</version>
</dependency>
2、开始编写测试类
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import java.io.File;
import java.util.Iterator;
public class PictureTest {
public static void main(String[] args) {
File jpegFile = new File("D:\\workspace\\workspace8_Photo_geographical_position\\5.jpg");
Metadata metadata;
try {
metadata = JpegMetadataReader.readMetadata(jpegFile);
Iterator<Directory> it = metadata.getDirectories().iterator();
while (it.hasNext()) {
Directory exif = it.next();
Iterator<Tag> tags = exif.getTags().iterator();
while (tags.hasNext()) {
Tag tag = (Tag) tags.next();
if(tag.toString().indexOf("Longitude") > -1 && tag.toString().indexOf("Ref") == -1) {
System.out.println("经度:"+ tag);
}
if(tag.toString().indexOf("Latitude") > -1 && tag.toString().indexOf("Ref") == -1) {
System.out.println("纬度:"+ tag);
}
System.out.println(tag);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、经纬度查询
[经纬度查询]: http://api.map.baidu.com/lbsapi/getpoint/index.html?qq-pf-to=pcqq.c2c
感兴趣的小朋友可以对接百度API,实现直接转换地址,或者展示照片信息等功能。