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解析,果然用了内 ...
随机推荐
- Cilium系列-14-Cilium NetworkPolicy 简介
系列文章 Cilium 系列文章 前言 今天我们进入 Cilium 安全相关主题, 介绍 Kubernetes 网络策略以及 CiliumNetworkPolicies 额外支持的内容. 网络策略(N ...
- 行行AI人才直播第15期:【AIGC科技公司法律顾问】Amber《AIGC的法律挑战》
近年来,AIGC技术的迅速进步为社会经济发展带来了新的机遇.各行各业都开始关注AIGC相关技术在商业落地中的应用,AIGC相关的创业及项目如雨后春笋般涌现.然而,AIGC的广泛应用也带来了一系列的法律 ...
- javascript创建数组
javascript数组:var array=[ ]等于创建一个数组 array[0]代表给数组的第一个位置上赋值,值为32 array[5]代表给数组的第六位置上赋值.值为3 在位置0,1,2,5位 ...
- brpc internal
brpc 内部实现 thread model pthread 1:1atomic cache同步降低性能 fiber n:1 -> nginx 多核难以扩展, 用户不能做阻塞操作. contex ...
- 让你的HpSocket Pull支持同步(应答式)操作
什么是HPSocket HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/ ...
- 达梦数据库-DW-国产化--九五小庞
武汉达梦数据库股份有限公司成立于2000年,是国内领先的数据库产品开发服务商,国内数据库基础软件产业发展的关键推动者.公司为客户提供各类数据库软件及集群软件.云计算与大数据等一系列数据库产品及相关技术 ...
- C中code关键字
单片机C语言code是什么作用? code的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是),因为C语言中没办法详细描述 ...
- asp.net mvc Core 网页错误提示:An unhandled exception occurred while processing the request.处理请求时发生未处理的异常。
网页错误提示: An unhandled exception occurred while processing the request. InvalidOperationException: The ...
- Batch Normalization 批量归一化的运算过程
Batch Normalization 批量归一化 具体的运算过程: 假设经过卷积计算过后得到的feature map的尺寸为 2*3*2*2. 其中2代表的是batch的大小,3代表的是通道chan ...
- 【matplotlib 实战】--饼图
饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表.在饼图中,每个扇形的弧长(以及圆心角和面积)大小,表示该种类占总体的比例,且这些扇形合在一起刚好是一个完全的圆形. 饼图最显著的功能在于表现&qu ...