使用Java程序读取JPG Tif等格式图片的exif信息
package com.util;
import java.io.File;
import java.util.Iterator;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.MetadataException;
import com.drew.metadata.exif.ExifDirectory;
import com.drew.metadata.exif.ExifReader;
public class ExifUtil {
public static void main(String[] args) {
try {
ExifReader er =new ExifReader(new File("填照片路径"));//也就用inputstream 或者二进制流
Metadata exif = er.extract();
Iterator itr = exif.getDirectoryIterator();
while (itr.hasNext()) {
Directory directory = (Directory) itr.next();
System.out.println(directory.getString(ExifDirectory.TAG_EXIF_VERSION));
System.out.println(directory.getString(ExifDirectory.TAG_MAKE));
System.out.println(directory.getString(ExifDirectory.TAG_MODEL));
System.out.println(directory.getString(ExifDirectory.TAG_FNUMBER));
System.out.println(directory.getString(ExifDirectory.TAG_EXPOSURE_TIME));
System.out.println(directory.getString(ExifDirectory.TAG_ISO_EQUIVALENT));
System.out.println(directory.getString(ExifDirectory.TAG_SOFTWARE));
System.out.println(directory.getDate(ExifDirectory.TAG_DATETIME_DIGITIZED));
System.out.println(directory.getDate(ExifDirectory.TAG_DATETIME_ORIGINAL));
System.out.println(directory.getString(ExifDirectory.TAG_ORIENTATION));
System.out.println(directory.getString(ExifDirectory.TAG_EXIF_IMAGE_WIDTH));
System.out.println(directory.getString(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT));
System.out.println(directory.getString(ExifDirectory.TAG_X_RESOLUTION));
System.out.println(directory.getString(ExifDirectory.TAG_Y_RESOLUTION));
System.out.println(directory.getString(ExifDirectory.TAG_EXPOSURE_BIAS));
}
} catch (ImageProcessingException e) {
e.printStackTrace();
} catch (MetadataException e) {
e.printStackTrace();
}
}
}
下面给一个实体类,可以方便存储exif信息
package com.util;
import java.util.Date;
/**
* 照片信息
*/
public class Photo {
// EXIF版本
private String exifversion = null;
// 相机品牌
private String make = null;
// 相机型号
private String model = null;
// 光 圈 值
private String fnumber = null;
// 快 門
private String exposuretime = null;
// 感 光 度
private String isoequivalent = null;
// 软 件
private String software = null;
// 原始拍摄时间
private Date originaldatetime = null;
// 数字化时间
private Date digitizeddatetime = null;
// 方 向
private String orientation = null;
// 图片宽度
private String exifimagewidth = null;
// 图片高度
private String exifimageheight = null;
// 水平分辨率
private String xresolution = null;
// 垂直分辨率
private String yresolution = null;
// 曝光补偿
private String exposurebias = null;
public String getExifversion() {
return exifversion;
}
public void setExifversion(String exifversion) {
this.exifversion = exifversion;
}
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getFnumber() {
return fnumber;
}
public void setFnumber(String fnumber) {
this.fnumber = fnumber;
}
public String getExposuretime() {
return exposuretime;
}
public void setExposuretime(String exposuretime) {
this.exposuretime = exposuretime;
}
public String getIsoequivalent() {
return isoequivalent;
}
public void setIsoequivalent(String isoequivalent) {
this.isoequivalent = isoequivalent;
}
public String getSoftware() {
return software;
}
public void setSoftware(String software) {
this.software = software;
}
public Date getOriginaldatetime() {
return originaldatetime;
}
public void setOriginaldatetime(Date originaldatetime) {
this.originaldatetime = originaldatetime;
}
public Date getDigitizeddatetime() {
return digitizeddatetime;
}
public void setDigitizeddatetime(Date digitizeddatetime) {
this.digitizeddatetime = digitizeddatetime;
}
public String getOrientation() {
return orientation;
}
public void setOrientation(String orientation) {
this.orientation = orientation;
}
public String getExifimagewidth() {
return exifimagewidth;
}
public void setExifimagewidth(String exifimagewidth) {
this.exifimagewidth = exifimagewidth;
}
public String getExifimageheight() {
return exifimageheight;
}
public void setExifimageheight(String exifimageheight) {
this.exifimageheight = exifimageheight;
}
public String getXresolution() {
return xresolution;
}
public void setXresolution(String xresolution) {
this.xresolution = xresolution;
}
public String getYresolution() {
return yresolution;
}
public void setYresolution(String yresolution) {
this.yresolution = yresolution;
}
public String getExposurebias() {
return exposurebias;
}
public void setExposurebias(String exposurebias) {
this.exposurebias = exposurebias;
}
@Override
public String toString() {
return "数字化时间:" + digitizeddatetime
+ ", 图片高度:" + exifimageheight + ", 图片宽度:"
+ exifimagewidth + ", EXIF版本:" + exifversion
+ ",曝光补偿:" + exposurebias + ", 快 門:"
+ exposuretime + ", 光 圈 值:" + fnumber + ", 感 光 度:"
+ isoequivalent + ", 相机品牌:" + make + ", 相机型号:" + model
+ ", 方 向:" + orientation + ", 原始拍摄时间:"
+ originaldatetime + ", 软 件:" + software
+ ", 水平分辨率:" + xresolution + ", 垂直分辨率:"
+ yresolution ;
}
}
metadata-extractor-2.4.0-beta-1.jar
使用Java程序读取JPG Tif等格式图片的exif信息的更多相关文章
- 用C#读取图片的EXIF信息的方法
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)
第二次更新,后面的代码有问题,有些专辑图片读取不到.发现是PNG图片的问题.在读取的过程中调试发现,图片帧前10个字节包含了图片的格式,在有些歌曲写着JPEG的格式,数据却是PNG的.先说下思路. j ...
- Java程序读取Properties文件
一.如果将properties文件保存在src目录下 1.读取文件代码如下: /** * 配置文件为settings.properties * YourClassName对应你类的名字 * / pri ...
- 我的第八个java程序--读取word内容
package World; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.p ...
- Java程序读取tomcat下的properties配置文件
代码如下: //找到tomcat/etc/wx文件夹 private static String getPropFolderPath() { /* Properties p = Syst ...
- Java中读取txt文件中中文字符时,出现乱码的解决办法
这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...
- java程序员应该熟悉的20个有用的库(转)
优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...
- Java程序员应该知道的20个有用的lib开源库
一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...
- 五种方式让你在java中读取properties文件内容不再是难题
一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...
随机推荐
- 9、el表达式的使用
一.EL表达式的作用: 1).使用变量访问web域中存储的对象 ${user } 2).访问javabean的属性 ${user.address.city } 3).执行基本的逻辑运算(el表达式 ...
- java(7)数组
一.什么是数组及其作用? 定义:具有相同数据类型的一个集合 作用:存储连续的具有相同类型的数据 二.java中如何声明和定义数组 2.1 声明和定义的语法: 数据类型[ ] 数组名:( int[ ] ...
- 【汇编语言】Doxbox 0.74 修改窗口大小
1.打开Doxbox安装路径,找到DOXBox 0.74-2 Option.bat,双击打开. 2.找到windowresolution和output,将其值修改为下图中的值. 注意:图中,1280x ...
- 【转载】使用sklearn优雅地进行数据挖掘
原文:http://www.cnblogs.com/jasonfreak/p/5448462.html 目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键 ...
- 杨辉三角(用for循环)
public class Test413__________________ { public static void main(String[] args) { int rows = 10; for ...
- EHCache:Eelment刷新后,timeToLiveSeconds失效了?
个人以为只要设定了timeToLiveSeconds,中间过程不管有没有访问,只要LiveSeconds时间到了,缓存就会失效.但是开发时发现并非如此,经过一番折腾,最终发现自己的理解是正确的,还是使 ...
- 【原创】运维基础之Nginx(1)简介、安装、使用
官方:http://nginx.org nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a ...
- Visual studio 编辑combobox程序卡死的问题
问题描述:使用vs2017开发一个winform小程序,一用combobox就卡死. 问题解决:关闭有道词典的取词功能. 软件开多了,就容易有冲突啊!
- 初学python之路-day02
python,诞生于1989年的圣诞,Guido van Rossum为了打发无聊,因此发明了python,并且开放了其源代码,使得这门语言在随后的几十年的发展的越来越广.现今,2.x版本已经在2.7 ...
- pl/sql学习(5): 触发器trigger/事务和锁
(一)触发器简单介绍 触发器是由数据库的特定时间来触发的, 特定事件主要包括以下几种类型: (1)DML: insert, update,delete 增删改 (2)DDL: create, alte ...