使用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]第1章习题11 各向同性导体中电荷分布的指数衰减
在各向同性的导体中, Ohm 定律具有如下形式: $$\bex {\bf j}=\sigma {\bf E}, \eex$$ 其中 $\sigma$ 称为电导率. 试证在真空中导体的连续性方程为 $$ ...
- 五十一、进程间通信——System V IPC 之进程信号量
51.1 进程信号量 51.1.1 信号量 本质上就是共享资源的数目,用来控制对共享资源的访问 用于进程间的互斥和同步 每种共享资源对应一个信号量,为了便于大量共享资源的操作引入了信号量集,可对所有信 ...
- 【codeforces 914H】Ember and Storm's Tree Game
原题链接 Description Ember和Storm正在玩游戏.首先,Ember构造一棵n个节点且每个节点度数不超过d的带节点编号的树T.然后,Storm选择两个不同的节点u和v,并写下从u到v路 ...
- LeakCanary监测内存泄漏的原理
监测机制利用了Java的WeakReference和ReferenceQueue,通过将Activity包装到WeakReference中,被WeakReference包装过的Activity对象如果 ...
- conda安装cv2库
conda install opencv-python或者 pip install opencv-python(不过好像是这个比较有效)
- 【原创】大叔经验分享(24)hive metastore的几种部署方式
hive及其他组件(比如spark.impala等)都会依赖hive metastore,依赖的配置文件位于hive-site.xml hive metastore重要配置 hive.metastor ...
- 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version
maven编译工程报错 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:add-source (s ...
- 图形验证码 tesserocr pillow
利用tesserocr和pil生成图形验证码 import tesserocr from PIL import Image image = Image.open('222.jpg') image = ...
- jetbrains的JetBrains PyCharm 2018.3.1破解激活到2100年(最新亲测可用)
破解补丁激活 之前看了好多的其它的方法感觉都不是很靠谱还是这个本人亲试可以长期有效不仅能激活pycharm.jetbrains的JetBrains PyCharm 2018.3.1破解激活到2100年 ...
- python安装多版本
39.107.96.81 root 123123 pyenv#可以实现python多版本控制与切换 pyenv local 3.5.1 ipython#更方便的编写python,可以补全命令彩色显示等 ...