使用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 ...
随机推荐
- [物理学与PDEs]第3章习题4 理想磁流体的能量守恒方程
试证明: 对理想磁流体, 能量守恒方程 (4. 14) 可以写为如下形式: $$\beex \bea \cfrac{\p}{\p t}&\sex{\rho e+\cfrac{1}{2}\rho ...
- [物理学与PDEs]第3章第2节 磁流体力学方程组 2.3 磁流体力学方程组
1. 磁流体力学方程组 $$\beex \bea \cfrac{\p {\bf H}}{\p t} &-\rot({\bf u}\times{\bf H})=\cfrac{1}{\sigma ...
- PhpStorm+xdebug调试——更新
之前写过一篇<PhpStorm+xdebug+postman调试>,但是经过后来一段时间的使用,发现有些累赘.这里介绍一种比较简单方便的操作. 在上一篇文章中有一段“ 7.设置Server ...
- C#获取应用程序路径
string s = Environment.CurrentDirectory; //需添加Forms.DLL s = System.Windows.Forms.Application.Startup ...
- 解决-webkit-box-orient: vertical;(文本溢出)属性在webpack打包后无法编译的问题
在scss里面: /*! autoprefixer: off */-webkit-box-orient: vertical;/* autoprefixer: on */
- 第五节,python基本语法
1.类(Class) Python中的类的概念与其它语言类似,比较特殊的是protected和private在python中没有明确的限制,通常的惯例是用单下划线_表示protected,用双下划线开 ...
- HTTP协议12-HTTPS
1)HTTP的缺点 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所有有可能已被篡改 1.1 通信使用明文可能会被窃听 由于HTTP本身不具备 ...
- Windows 快捷键总结
一.日常用法 1.Win + R 运行命令窗,cmd等必备,令人进入注册表,也需要通过运行命令窗,如注册表示运行 Regedit 命令,组策略使用 gpedit.msc 命令等. 2.Win + E ...
- resultset 查询时返回多个相同值
背景 做个简单的接口开发,拿到的平台比较不理想,好久没重新搭建一个了,正好练练手.用了基础的servlet,maven,logback(log4j不支持格式化,比较烦人),fastjson,druid ...
- VMware的NAT网络模式
参考链接:https://www.cnblogs.com/linjiaxin/p/6476480.html 图例: