java读取照片Exif信息到实体类
前言
1.总共读出来了228个参数信息,但是我挑选了36个我认为比较有价值的参数,弄成了实体类
(其实是因为很多参数我看不明白是啥意思)
2.为了方便,所以实体类里我直接用中文字段了
效果图
导入依赖
<!-- 读取照片元信息 -->
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.19.0</version>
</dependency>
算法代码
public static void main(String[] args) throws ImageProcessingException, IOException {
File file = new File("C:\\Users\\13301\\Desktop\\漫漫星河\\IMG_1252.JPG");
ImageExifInfoVo imageExifInfoVo = readImageExif(file);
System.out.println(imageExifInfoVo);
}
/**
* 读取照片Exif信息
*
* @param file
* @return
* @throws ImageProcessingException
* @throws IOException
*/
public static ImageExifInfoVo readImageExif(File file) throws ImageProcessingException, IOException {
ImageExifInfoVo exifInfoVo = new ImageExifInfoVo();
Metadata metadata = JpegMetadataReader.readMetadata(file);
boolean type = metadata.containsDirectoryOfType(GpsDirectory.class);
Iterable<Directory> it = metadata.getDirectories();
for (Directory d : it) {
Collection<Tag> tags = d.getTags();
for (Tag tag : tags) {
String tagName = tag.getTagName();
String description = tag.getDescription();
switch (tagName) {
case "Make":
exifInfoVo.set厂商(description);
break;
case "Model":
exifInfoVo.set机型(description);
break;
case "Orientation":
exifInfoVo.set方向(description);
break;
case "X Resolution":
exifInfoVo.set水平分辨率(description);
break;
case "Y Resolution":
exifInfoVo.set垂直分辨率(description);
break;
case "Resolution Unit":
exifInfoVo.set分辨率单位(description);
break;
case "Date/Time":
exifInfoVo.set拍摄时间(description);
break;
case "Exposure Time":
exifInfoVo.set曝光时间(description);
break;
case "F-Number":
exifInfoVo.set光圈(description);
break;
case "Exposure Program":
exifInfoVo.set曝光程序(description);
break;
case "ISO Speed Ratings":
exifInfoVo.setISO感光度(description);
break;
case "Sensitivity Type":
exifInfoVo.set感光类型(description);
break;
case "Recommended Exposure Index":
exifInfoVo.set推荐曝光指数(description);
break;
case "Exif Version":
exifInfoVo.setExif版本(description);
break;
case "Components Configuration":
exifInfoVo.set成分构成(description);
break;
case "Shutter Speed Value":
exifInfoVo.set快门速度(description);
break;
case "Aperture Value":
exifInfoVo.set光圈值(description);
break;
case "Exposure Bias Value":
exifInfoVo.set曝光补偿(description);
break;
case "Metering Mode":
exifInfoVo.set测光模式(description);
break;
case "Flash":
exifInfoVo.set闪光灯(description);
break;
case "Focal Length":
exifInfoVo.set焦距(description);
break;
case "User Comment":
exifInfoVo.set用户注释(description);
break;
case "Color Space":
exifInfoVo.set色域(description);
break;
case "Exif Image Width":
exifInfoVo.set照片宽度(description);
break;
case "Exif Image Height":
exifInfoVo.set照片高度(description);
break;
case "White Balance Mode":
exifInfoVo.set白平衡模式(description);
break;
case "Lens Model":
exifInfoVo.set镜头型号(description);
break;
case "Macro Mode":
exifInfoVo.set微距模式(description);
break;
case "Self Timer Delay":
exifInfoVo.set延时器(description);
break;
case "Quality":
exifInfoVo.set质量(description);
break;
case "Continuous Drive Mode":
exifInfoVo.set连续拍照模式(description);
break;
case "Record Mode":
exifInfoVo.set记录模式(description);
break;
case "Long Focal Length":
exifInfoVo.set长焦距(description);
break;
case "Short Focal Length":
exifInfoVo.set短焦距(description);
break;
case "Max Aperture":
exifInfoVo.set镜头最大光圈(description);
break;
case "Min Aperture":
exifInfoVo.set镜头最小光圈(description);
break;
default:
break;
}
}
}
return exifInfoVo;
}
实体类代码
package cn.daenx.yhchatDemo.testApp;
import lombok.Data;
/**
* 照片Exif信息
*
* @author DaenMax
*/
@Data
public class ImageExifInfoVo {
private String 厂商;
private String 机型;
private String 方向;
private String 水平分辨率;
private String 垂直分辨率;
private String 分辨率单位;
private String 拍摄时间;
private String 曝光时间;
private String 光圈;
private String 曝光程序;
private String ISO感光度;
private String 感光类型;
private String 推荐曝光指数;
private String Exif版本;
private String 成分构成;
private String 快门速度;
private String 光圈值;
private String 曝光补偿;
private String 测光模式;
private String 闪光灯;
private String 焦距;
private String 用户注释;
private String 色域;
private String 照片宽度;
private String 照片高度;
private String 白平衡模式;
private String 镜头型号;
private String 微距模式;
private String 延时器;
private String 质量;
private String 连续拍照模式;
private String 记录模式;
private String 长焦距;
private String 短焦距;
private String 镜头最大光圈;
private String 镜头最小光圈;
}
java读取照片Exif信息到实体类的更多相关文章
- Java读取图片exif信息实现图片方向自动纠正
起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...
- java读取照片信息 获取照片拍摄时的经纬度
项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...
- 读取Excel文件存储在实体类中
1.Maven文件 <!--读取Excel的架包--> <dependency> <groupId>org.apache.poi</groupId> & ...
- PHP获取照片exif信息
在这个没图说个屁的年代,照片还是很重要的.如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 PHP获取照片exif信息,重要的是 获取图片的GPS信息,如果再 ...
- 照片EXIF信息的读取和改写的JAVA实现
由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...
- java 项目中几种O实体类的概念
经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...
- java读取properties配置文件信息
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- 如何通过java反射将数据库表生成实体类?
首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有 ...
- Python 读取照片的信息:拍摄时间、拍摄设备、经纬度等,以及根据经纬度通过百度地图API获取位置
通过第三方库exifread读取照片信息.exifread官网:https://pypi.org/project/ExifRead/ 一.安装exifreadpip install exifread ...
- java解析导入excel表格转为实体类javabean,根据实体类中的中文名称
最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...
随机推荐
- APubPlat 一款Devops自动化部署、持续集成、堡垒机开源项目、友好的Web Terminal
嗨.很高心你能进入这里,我是zane, 在这里给你介绍一款完整的Devops自动化部署工具 APubPlat - 一款完整的Devops自动化部署.持续集成.堡垒机.并且友好的Web Termina ...
- oracle 11g手工建库步骤(初学者)
要建立的数据库ORACLE_SID=test1sys和system的密码为oracle1.建立相应的目录mkdir /u01/app/oracle/oradata/test1mkdir /u01/ap ...
- Unity的IUnityLinkerProcessor:深入解析与实用案例
Unity IUnityLinkerProcessor Unity IUnityLinkerProcessor是Unity引擎中的一个接口,它允许开发者在Unity项目构建时对代码进行链接处理.这个接 ...
- API接口的对接流程和注意事项
API接口的对接流程和注意事项 随着互联网技术的发展和数字化时代的到来,API接口已经成为应用程序之间进行数据交换和通信的重要方式.API即应用程序接口,是一种定义.调用和交互的规范,使得不同应用 ...
- 深入了解API接口技术及其应用
尊敬的读者们,大家好!在互联网时代,API(Application Programming Interface)接口已经成为开发者们连接各种应用.获取数据的重要工具.今天,我们将深入探讨API接口技术 ...
- Codeforces-1095E-Almost-Regular-Bracket-Sequence
题意 给定一个长度为 \(n\) 的小括号序列,求有多少个位置满足将这个位置的括号方向反过来后使得新序列是一个合法的括号序列.即在任意一个位置前缀左括号的个数不少于前缀右括号的个数,同时整个序列左右括 ...
- (null) entry in command string: null chmod 0644
在WIndows操作系统中本地运行spark程序,报以下错误: ....(null) entry in command string: null chmod 0644 ..(后面是目的目录) 解决方法 ...
- 探索计算机的I/O控制方式:了解DMA控制器的作用与优势
I/O控制方式 在前面我们已经了解到,每个设备都配备了一个设备控制器.当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作.然而,尽管设备控制器会更新状态寄存器的状态,但是如 ...
- 织梦DedeCMS文章内容页调用标签方法教程
织梦DedeCMS是新手站长使用比较多的建站软件,其模板制作也比较方便,一些站长朋友对其模板调用标签不是太熟悉,小编为大家介绍下织梦文章内容页调用标签的方法. 1.调用文章标题: {dede:fiel ...
- qiankun微前端实践
为什么要使用微前端 微前端架构具备以下几个核心价值: 技术栈无关 主框架不限制接入应用的技术栈,微应用具备完全自主权 独立开发.独立部署 微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步 ...