Java获取图像Exif信息
Exif(Exchangeable Image File)是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。在Windows 系统中,对图像文件右键选择“属性”,在“详细信息”选项卡中可以查看Exif值,但这些值并不全面,想要查看完整的Exif信息,需要下载专业的Exif信息查看器。
用Java实现一个Exif查看器,需要借助开源项目metadata-extractor,你可以在https://drewnoakes.com/code/exif/中查看该项目的详细信息。
导入jar包
项目需要两个jar包:
metadata-extractor-2.8.1.jar,
xmpcore-5.1.2.jar
你可以在https://github.com/drewnoakes/metadata-extractor/releases下载这两个jar包。
通常情况下,使用
Metadata metadata = ImageMetadataReader.readMetadata(file);
就可以满足大多数需求。该方法知用于不确定图像格式的情况,该方法会自动确定图像的格式,返回一个Metadata对象。支持JPEG, TIFF, GIF, BMP 和RAW等大多数格式。
如果知道确切的图像格式,如JPEG、BMP等,就可以使用JpegMetadataReader或BmpMetadataReader来获得Metadata对象,如:
Metadata metadata = JpegMetadataReader.readMetadata(file);
当然,如果你只希望读取无数据类型的一个子集,你可以指定一个Reader,如:只处理JPEG类型:
Iterable<JpegSegmentMetadataReader> readers = Arrays.asList(new ExifReader(), new IptcReader());Metadata metadata = JpegMetadataReader.readMetadata(file, readers);
下面我们使用第一种方式给出一个完整的例子:
import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;import java.io.File;public class SampleUsage
{public static void main(String[] args){File file = new File("N:/ls.jpg");try{Metadata metadata = ImageMetadataReader.readMetadata(file);print(metadata);}catch (Exception e){e.printStackTrace();}}private static void print(Metadata metadata){for (Directory directory : metadata.getDirectories()){for (Tag tag : directory.getTags()){System.out.print(tag.getTagName() + " --> ");System.out.println(tag.getDescription());}if (directory.hasErrors()){for (String error : directory.getErrors()){System.err.println("ERROR: " + error);}}}}
}
输出结果如下(部分):
Make --> Canon
Model --> Canon EOS 700D
Orientation --> Top, left side (Horizontal / normal)
X Resolution --> 72 dots per inch
Y Resolution --> 72 dots per inch
Resolution Unit --> Inch
Software --> Adobe Photoshop CS6 (Windows)
Date/Time --> 2015:05:18 16:01:01
Artist --> Songlin
YCbCr Positioning --> Datum point
前面是参数的名称,后面是参数的值,如Make参数(厂商),对应的值是Canon(佳能)。常见的Exif参数如下表:
代码 |
英文解释 |
中文解释 |
0x0000 |
GPS Version ID |
GPS版本 |
0x010f |
Make |
厂商 |
0x0110 |
Model |
机型 |
0x0112 |
Orientation |
方向 |
0x0131 |
Software |
软件 |
0x0132 |
Date/Time |
修改时间 |
0x013b |
Artist |
作者 |
0x0213 |
YCbCr Positioning |
YcbCr定位 |
0x829a |
Exposure Time |
曝光时间 |
0x829d |
F-Number |
光圈 |
0x8822 |
Exposure Program |
曝光程序 |
0x8827 |
ISO Speed Ratings |
ISO感光度 |
0x9000 |
Exif Version |
Exif版本 |
0x9003 |
Date/Time Original |
拍摄时间 |
0x9004 |
Date/Time Digitized |
数字化时间 |
0x9101 |
Components Configuration |
成分构成 |
0x9201 |
Shutter Speed Value |
快门速度 |
0x9202 |
Aperture Value |
光圈值 |
0x9204 |
Exposure Bias Value |
曝光补偿 |
0x9205 |
Max Aperture Value |
最大光圈 |
0x9207 |
Metering Mode |
测光模式 |
0x9209 |
Flash |
闪光 |
0x920a |
Focal Length |
焦距 |
0x9286 |
User Comment |
用户注释 |
0x9290 |
Sub-Sec Time |
次秒(修改时间) |
0x9291 |
Sub-Sec Time Original |
次秒(拍摄时间) |
0x9292 |
Sub-Sec Time Digitized |
次秒(数字化时间) |
0xa000 |
FlashPix Version |
FlashPix版本 |
0xa001 |
Color Space |
色彩空间 |
0xa002 |
Exif Image Width |
Exif图像宽度 |
0xa003 |
Exif Image Height |
Exif图像高度 |
0xa20e |
Focal Plane X Resolution |
焦平面水平分辨率 |
0xa20f |
Focal Plane Y Resolution |
焦平面垂直分辨率 |
0xa210 |
Focal Plane Resolution Unit |
焦平分辨率单位 |
0xa401 |
Custom Rendered |
自定义补偿 |
0xa402 |
Exposure Mode |
曝光模式 |
0xa403 |
White Balance Mode |
白平衡 |
0xa406 |
Scene Capture Type |
场景拍摄类型 |
0x0001 |
Interoperability Index |
可交换标准 |
0x0002 |
Interoperability Version |
可交换版本 |
0x0103 |
Thumbnail Compression |
压缩模式 |
0x0201 |
Thumbnail Offset |
JPEG缩略图起始位置 |
0x0202 |
Thumbnail Length |
JPEG缩略图数据长度 |
0x011a |
X Resolution |
水平分辨率 |
0x011b |
Y Resolution |
垂直分辨率 |
0x0128 |
Resolution Unit |
分辨率单位 |
0x0131 |
Software |
软件 |
0x0006 |
Lens Information |
镜头信息 |
0x0007 |
Lens |
镜头 |
Java获取图像Exif信息相关推荐
- Java 提取EXIF信息批量重命名
手机或照机拍摄的照片名称通常是"IMG_001.JPG"这种格式,这种文件名称是无意义的.使用照片拍摄时间命名可以让我们在多年以后查找照片时根据文件名就能快速筛选出某一时间段的照片 ...
- 轻松获取图片和视频文件的Exif信息-Java篇
前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...
- Java获取照片的Exif信息,并解析GPS
Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...
- java exif_照片EXIF信息的读取和改写的JAVA实现
由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...
- java图像处理,拷贝图像EXIF信息
在使用java做数字图像处理的时候,有时候需要保留图像的EXIF属性信息,比如相机型号,GPS位置等.处理图像的时候,一般直接通过ImageIO读取图像每个像素上的RGB色彩信息,但是图像的其他属性信 ...
- java exif 语言编码_Java读取图片EXIF信息的代码
Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...
- java 修改exif_照片EXIF信息的读取和改写的JAVA实现
由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...
- java 修改照片exif信息
参考文章: java更改图片拍摄信息及其他Exif详细信息 Java修改图片元数据Exif信息 Commons Imaging开源网站介绍 引入类 <dependency><grou ...
- java exif 怎么获取属性_Java如何读取图片EXIF信息
Java如何读取图片EXIF信息 大家知道Java如何读取图片属性信息吗?下面小编为大家整理了Java读取图片EXIF信息的方法,希望能帮到大家! 首先介绍一下什么是EXIF,EXIF是Exchang ...
- java根据exif旋转,关于图片文件旋转JPEG与EXIF信息
关于图片文件旋转JPEG与EXIF信息 2019/10/31 0:36:39 YuLimin 程序员俱乐部 我要评论(1) 摘要:关于图片文件旋转JPEG与EXIF信息比如某相机拍摄出来的相片, ...
最新文章
- postman+newman(2)
- Linux下使用终端调试Python程序:pudb
- 2018年全球AI突破性技术TOP10
- NGUI从入门到实战(大学霸内部资料)
- php灰度化,PHP Imagick – 将图像转换为灰度(非常糟糕的结果)
- PyTorch可视化理解卷积神经网络
- 真香!8 行代码搞定最大子数组和问题
- 织梦dede模板|白绿色户外拓展教育培训网站织梦dede模板源码[带手机版数据同步]
- 浏览器绑架:曾几何时,喜爱的“百度”成为了“流氓”的代名词?- 移除hao123首页...
- 基于tcp的网络程序_【CVPR 2020 Tutorial】基于神经网络的符号化视觉推理和程序合成(2)...
- linux运行nodejs一般路径_Linux上安装Nodejs
- 利用wordpress搭建自己的网站(百度云虚拟主机)
- Java完全自学手册,从外包到大厂,再到万粉博主都靠它
- Warning: phpinfo() has been disabled for secur...
- 深度学习环境配置:2080Ti+Ubuntu16.04+CUDA10+cuDNN7.3+TensorFlow-gpu1.12
- 【jQuery】货币格式化
- 移动端-安卓-接口测试简介
- Machine Learning之高等数学篇(五)☞《偏导数与方向导数、梯度》
- vb中msgbox用法
- 5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导
热门文章
- 建立ad-hoc网络 // 电脑设置wifi热点 (Win10)
- 一个EXCEL数组公式的解析
- python读取grd数据_从等值线图形获取DAT和GRD格式的数据文件_王宜芳
- 30+英文电子书免费下载网站,跟喜欢看英文电子书的朋友分享
- 核桃编程Delta Lake实时数仓应用实践
- unexpected inconstancy
- iOS远程真机之usbmuxd中iproxy的作用
- ES3、ES4、ES5、ES6区别
- Flutter 使用ListView的separated构造一个带下拉加载的列表
- python图片识别文字开源库Easyocr使用