一般情况下是java程序读取不到gps等扩展信息的。如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址:

http://code.google.com/p/metadata-extractor/),这个jar提供了支持获取扩展信息的功能。

import java.io.File;

import java.io.IOException;

import com.drew.imaging.ImageMetadataReader;

import com.drew.imaging.ImageProcessingException;

public class SampleUsage

{

/**

* 图片信息获取metadata元数据信息

* @param fileName 需要解析的文件

* @return

*/

public ImgInfoBean parseImgInfo (String fileName)

{

File file = new File(fileName);

ImgInfoBean imgInfoBean = null;

try {

Metadata metadata = ImageMetadataReader.readMetadata(file);

imgInfoBean = printImageTags(file, metadata);

} catch (ImageProcessingException e) {

System.err.println("error 1a: " + e);

} catch (IOException e) {

System.err.println("error 1b: " + e);

}

return imgInfoBean;

}

/**

* 读取metadata里面的信息

* @param sourceFile 源文件

* @param metadata metadata元数据信息

* @return

*/

private ImgInfoBean printImageTags(File sourceFile, Metadata metadata)

{

ImgInfoBean imgInfoBean = new ImgInfoBean ();

imgInfoBean.setImgSize(sourceFile.getTotalSpace());

imgInfoBean.setImgName(sourceFile.getName());

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

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

String tagName = tag.getTagName();

String desc = tag.getDescription();

if (tagName.equals("Image Height")) {

//图片高度

imgInfoBean.setImgHeight(desc);

} else if (tagName.equals("Image Width")) {

//图片宽度

imgInfoBean.setImgWidth(desc);

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

//拍摄时间

imgInfoBean.setDateTime(desc);

} else if (tagName.equals("GPS Altitude")) {

//海拔

imgInfoBean.setAltitude(desc);

} else if (tagName.equals("GPS Latitude")) {

//纬度

imgInfoBean.setLatitude(pointToLatlong(desc));

} else if (tagName.equals("GPS Longitude")) {

//经度

imgInfoBean.setLongitude(pointToLatlong(desc));

}

}

for (String error : directory.getErrors()){

System.err.println("ERROR: " + error);

}

}

return imgInfoBean;

}

/**

* 经纬度转换 度分秒转换

* @param point 坐标点

* @return

*/

public 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 void main(String[] args)

{

ImgInfoBean imgInfoBean = new SampleUsage().parseImgInfo("C:\\DSC_4564.JPG");

System.out.println(imgInfoBean.toString());

}

}

文件信息bean类。

public class ImgInfoBean {

private String imgHeight ;//图片高度

private String imgWidth ;//图片宽度

private String dateTime ;//拍摄时间

private String altitude ;//海拔

private String latitude;//纬度

private String longitude ;//经度

private Long imgSize; //文件大小

private String imgName; //文件名称

public Long getImgSize() {

return imgSize;

}

public void setImgSize(Long imgSize) {

this.imgSize = imgSize;

}

public String getImgName() {

return imgName;

}

public void setImgName(String imgName) {

this.imgName = imgName;

}

public String getImgHeight() {

return imgHeight;

}

public void setImgHeight(String imgHeight) {

this.imgHeight = imgHeight;

}

public String getImgWidth() {

return imgWidth;

}

public void setImgWidth(String imgWidth) {

this.imgWidth = imgWidth;

}

public String getDateTime() {

return dateTime;

}

public void setDateTime(String dateTime) {

this.dateTime = dateTime;

}

public String getAltitude() {

return altitude;

}

public void setAltitude(String altitude) {

this.altitude = altitude;

}

public String getLatitude() {

return latitude;

}

public void setLatitude(String latitude) {

this.latitude = latitude;

}

public String getLongitude() {

return longitude;

}

public void setLongitude(String longitude) {

this.longitude = longitude;

}

public String toString (){

return "[图片信息]文件名称:"+ this.imgName+" 文件大小:"+this.imgSize +" 高度:"+this.imgHeight+" 宽度:"+this.imgWidth+" 拍摄时间:"+this.dateTime+" 海拔:"+this.altitude+" 纬度:"+this.latitude+" 经度:"+this.longitude;

}

}

java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息相关推荐

  1. java程序中的图片与数值关联_Java 数据库处理通用代码 And 图片存储 及其遇到的问题...

    1.数据库 #建库 create database zhenqk charset utf8; use zhenqk; CREATE TABLE `HR` ( `id` int(6) NOT NULL ...

  2. java程序中日志jar包的使用_java – 如何使用jar文件中的Liquibase changelog

    我目前在我的application.properties中有以下内容: liquibase.change日志=类路径:/db/changelog/db.changelog-master.xml 该文件 ...

  3. java程序中可以有几个构造方法_java中多个构造方法可以相互引用么?

    这个程序是创造一个矩形并输出它的对角点importjava.awt.Point;classMyRect{intx1=0;intx2=0;inty1=0;inty2=0;MyRect(intx1,int ...

  4. Java 程序中的多线程

    在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...

  5. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  6. java程序中语句隔开_《Java语言程序设计》填空题.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava <Java语言程序设计>填空题.doc9页 ...

  7. java程序中语句隔开_java程序设计复习二

    java程序设计复习二 <Java语言程序设计>填空题 1. Java程序主要分为两种类型: 应用程序和 Applet程序 . 2. Java程序用{ }将多条语句组合在一起,语句之间必须 ...

  8. 在Java程序中创建和转换PDF文件

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...

  9. java中打开文件显示_从java程序中打开任何文件

    在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...

最新文章

  1. 一个三本程序猿的大厂逆袭之路
  2. Android开发入门经典实例
  3. pycharm-连接mysql设置
  4. 开源项目参与_通过更好的文档吸引更多的项目参与人
  5. php数据库的值嵌入input_求助:问个关于用INPUT提取数据库里的值然后修改的问题。...
  6. windows上安装使用mySql
  7. 货币化物联网:实现收益
  8. 中国交互式智能板市场趋势报告、技术动态创新及市场预测
  9. C/C++全局变量和局部变量作用域问题
  10. Windows服务开发相关文章收集
  11. 解决docker-compose: command not found
  12. mac 下载appium
  13. SRP记录_20190418
  14. SpringBoot巧用静态内部类优雅地接收参数
  15. 用户画像项目两大核心内容之一“one_id”(含SQL实现代码)
  16. Arduino ESP32Web配网
  17. Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)
  18. 计算机硬件系统中 计算机心脏,办公室常用设备教案——计算机办公设备(计算机硬件及软件系统)02.doc...
  19. wxpython+MySQL实现学生信息管理系统
  20. go work 工作区

热门文章

  1. 中国科学家研发新的全基因组组装算法
  2. Linux下Boost编译安装
  3. tensorflow gan网络流程图
  4. 列表转字符串,再转回来,完全一致
  5. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)
  6. 一文弄懂神经网络中的反向传播法——BackPropagation
  7. 在centos上安装最新的glibc
  8. java struts2 session mysql 内存不足_Java - 用户在线的数据库实现方法和内存实现方法...
  9. c#语言编写汉诺塔游戏,c#实现汉诺塔问题示例
  10. oracle 游标 内联,oracle – EXEC_SQL,EXECUTE IMMEDIATE,DBMS_SQL和内联SQL之间的区别