java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息
一般情况下是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信息相关推荐
- java程序中的图片与数值关联_Java 数据库处理通用代码 And 图片存储 及其遇到的问题...
1.数据库 #建库 create database zhenqk charset utf8; use zhenqk; CREATE TABLE `HR` ( `id` int(6) NOT NULL ...
- java程序中日志jar包的使用_java – 如何使用jar文件中的Liquibase changelog
我目前在我的application.properties中有以下内容: liquibase.change日志=类路径:/db/changelog/db.changelog-master.xml 该文件 ...
- java程序中可以有几个构造方法_java中多个构造方法可以相互引用么?
这个程序是创造一个矩形并输出它的对角点importjava.awt.Point;classMyRect{intx1=0;intx2=0;inty1=0;inty2=0;MyRect(intx1,int ...
- Java 程序中的多线程
在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...
- java内存漏洞_处理Java程序中的内存漏洞
Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...
- java程序中语句隔开_《Java语言程序设计》填空题.doc
您所在位置:网站首页 > 海量文档  > 计算机 > Java <Java语言程序设计>填空题.doc9页 ...
- java程序中语句隔开_java程序设计复习二
java程序设计复习二 <Java语言程序设计>填空题 1. Java程序主要分为两种类型: 应用程序和 Applet程序 . 2. Java程序用{ }将多条语句组合在一起,语句之间必须 ...
- 在Java程序中创建和转换PDF文件
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...
- java中打开文件显示_从java程序中打开任何文件
在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...
最新文章
- 一个三本程序猿的大厂逆袭之路
- Android开发入门经典实例
- pycharm-连接mysql设置
- 开源项目参与_通过更好的文档吸引更多的项目参与人
- php数据库的值嵌入input_求助:问个关于用INPUT提取数据库里的值然后修改的问题。...
- windows上安装使用mySql
- 货币化物联网:实现收益
- 中国交互式智能板市场趋势报告、技术动态创新及市场预测
- C/C++全局变量和局部变量作用域问题
- Windows服务开发相关文章收集
- 解决docker-compose: command not found
- mac 下载appium
- SRP记录_20190418
- SpringBoot巧用静态内部类优雅地接收参数
- 用户画像项目两大核心内容之一“one_id”(含SQL实现代码)
- Arduino ESP32Web配网
- Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)
- 计算机硬件系统中 计算机心脏,办公室常用设备教案——计算机办公设备(计算机硬件及软件系统)02.doc...
- wxpython+MySQL实现学生信息管理系统
- go work 工作区
热门文章
- 中国科学家研发新的全基因组组装算法
- Linux下Boost编译安装
- tensorflow gan网络流程图
- 列表转字符串,再转回来,完全一致
- 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)
- 一文弄懂神经网络中的反向传播法——BackPropagation
- 在centos上安装最新的glibc
- java struts2 session mysql 内存不足_Java - 用户在线的数据库实现方法和内存实现方法...
- c#语言编写汉诺塔游戏,c#实现汉诺塔问题示例
- oracle 游标 内联,oracle – EXEC_SQL,EXECUTE IMMEDIATE,DBMS_SQL和内联SQL之间的区别