前言

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信息到实体类的更多相关文章

  1. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

  2. java读取照片信息 获取照片拍摄时的经纬度

    项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...

  3. 读取Excel文件存储在实体类中

    1.Maven文件 <!--读取Excel的架包--> <dependency> <groupId>org.apache.poi</groupId> & ...

  4. PHP获取照片exif信息

    在这个没图说个屁的年代,照片还是很重要的.如果照片上传后会自动加上 照片相关信息,那用户体验的确会好很多,本着这个想法,今天尝试了下 PHP获取照片exif信息,重要的是 获取图片的GPS信息,如果再 ...

  5. 照片EXIF信息的读取和改写的JAVA实现

    由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...

  6. java 项目中几种O实体类的概念

    经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...

  7. java读取properties配置文件信息

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  8. 如何通过java反射将数据库表生成实体类?

    首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有 ...

  9. Python 读取照片的信息:拍摄时间、拍摄设备、经纬度等,以及根据经纬度通过百度地图API获取位置

    通过第三方库exifread读取照片信息.exifread官网:https://pypi.org/project/ExifRead/ 一.安装exifreadpip install exifread ...

  10. java解析导入excel表格转为实体类javabean,根据实体类中的中文名称

    最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...

随机推荐

  1. P1941 [NOIP2014 提高组] 飞扬的小鸟 题解

    我们先不管障碍物. 设 \(f[i][j]\) 表示来到点 \((i,j)\) 的最少点击屏幕数. 因为每秒要不上升 \(k\times x[i]\),要么下降 \(y[i]\). 所以有: \[f[ ...

  2. 「Go笔记-02」变量、数据类型、数据类型间转换、进制转换...看这一篇就Go了

    前言 一个程序就是一个世界,不论是使用哪种高级程序语言编写程序, 变量都是其程序的基本组成单位, 变量 在 go 中 变量是用于存储数据的命名空间(内存位置),它可以表示一个值,这个值在程序执行过程中 ...

  3. jdk安装自动化

    写个在linux环境安装Java的脚本(install_java.sh),只需将jdk上传至/opt目录下,执行脚本即可. #!/bin/bash #author:zhangyl #本安装使用jdk版 ...

  4. Protobuf vs JSON

    Protobuf(Protocol Buffers)和 JSON 都是数据序列化格式,但它们在许多方面有着显著的不同.以下是对两者的一些主要比较: 数据大小和速度: Protobuf:由于 Proto ...

  5. 分库表数据倾斜的处理让我联想到了AKF模型

    1 背景 最近在做需求的时候需要在一张表中增加一个字段. 这张表情况如下: 1.拆分了多个库多张表 2.库表拆分按表中商户编码字段hash之后取模进行拆分 由于库表拆分按照商户编码,有些大商家的单子数 ...

  6. 「joisc 2019 - d2t2」ふたつの料理 Two Dishes

    [link.](E - ふたつの料理 (Two Dishes) (atcoder.jp) 我要放假 神仙题. 首先可以把两根轴拉成平面(which is a common trick),把决策的过程看 ...

  7. Ds100p -「数据结构百题」61~70

    61.P5355 [Ynoi2017]由乃的玉米田 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美. 这排玉米一共有 \(N\) 株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出 ...

  8. TrueUpdate白加黑木马分析保姆级教程

    目录 TrueUpdate白加黑木马分析保姆级教程 0x00:前言 TrueUpdate是什么? 0x01: TrueUpdate逆向分析解压密码 查壳 脱壳 分金定穴 找到解压密码方法1: 找到解压 ...

  9. 从原理到实战,详解XXE攻击

    本文分享自华为云社区<[安全攻防]深入浅出实战系列专题-XXE攻击>,作者: MDKing. 1 基本概念 XML基础:XML 指可扩展标记语言(Extensible Markup Lan ...

  10. 产品代码都给你看了,可别再说不会DDD(七):实体与值对象

    这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...