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解析,果然用了内 ...
随机推荐
- 王道oj/problem11(函数调用中实现指针的传递)
网址:http://oj.lgwenda.com/prblem/11 思路:函数中的j=&i,为i的地址 *j可以从地址访问,从而改变i的值 代码: #define _CRT_SECURE_N ...
- MySQL8_SQL语法
MySQL8_SQL语法 SQL 全称 Structured Query Language,结构化查询语言.操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 . 一.SQL通用语法 在学 ...
- mall:redis项目源码解析
目录 一.mall开源项目 1.1 来源 1.2 项目转移 1.3 项目克隆 二.Redis 非关系型数据库 2.1 Redis简介 2.2 分布式后端项目的使用流程 2.3 分布式后端项目的使用场景 ...
- 论文解读(TAMEPT)《A Two-Stage Framework with Self-Supervised Distillation For Cross-Domain Text Classification》
论文信息 论文标题:A Two-Stage Framework with Self-Supervised Distillation For Cross-Domain Text Classificati ...
- 探索API接口:从概念到实践
在当今数字化时代,API(Application Programming Interface)接口成为了各种应用程序之间实现数据交互和功能集成的关键.无论是开发一个网站.构建一个移动应用还是进行数据分 ...
- 一个.NET 7 + DDD + CQRS +React+Vite的实战项目
项目简介 基于SignalR实现聊天通信,支持横向扩展,可支撑上万用户同时在线聊天 后端架构 后端技术栈采用 .NET 7 PostgreSQL (业务数据库) Redis(用于存放热点数据,和支持S ...
- LSTM推导
LSTM推导 forward propagation def lstm_cell_forward(xt, a_prev, c_prev, parameters): """ ...
- Windows安装、配置、卸载MySQL教程
MySQL是一个关系型数据库管理系统,目前为Oracle旗下产品,它具有开源.体积小.速度快的优点,许多网站使用的都是MySQL数据库. 简单而言,MySQL数据库核心功能就是用来存储数据的. MyS ...
- PHP判断是否是微信打开, 浏览器打开
#问题 项目中遇到的问题, 如果用户是使用微信访问的. 那么进行友好提示"如何使用浏览器打开/告诉用户使用浏览器打开" 方案 useragent是浏览器标识, 带有一些客户信息. ...
- Servlet 上
Servlet 1.什么是Servlet Servlet即Server Applet是运行在Web服务器端的小程序 2.创建Servlet的三种方式 注意:从Tomcat10.0以后,我们统一用 ja ...