首页 > 编程语言 >java读取照片Exif信息到实体类

java读取照片Exif信息到实体类

时间:2023-11-26 09:33:42浏览次数:31  
标签:case 实体类 java String Exif private break exifInfoVo description

前言

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 镜头最小光圈;
}

标签:case,实体类,java,String,Exif,private,break,exifInfoVo,description
From: https://www.cnblogs.com/daen/p/17856549.html

相关文章

  • java处理前端传来的金额并转化为分
    在Java中,可以使用BigDecimal类来处理金额importjava.math.BigDecimal;publicclassMain{publicstaticvoidmain(String[]args){BigDecimalamount=newBigDecimal("1234.56");System.out.println("原始金额:"+amount);//对金额进行操作,例如加法、减法、乘法......
  • java如何分割字符串?
    在Java中,可以使用split()方法来分割字符串。split()方法接受一个正则表达式作为参数,根据该正则表达式将字符串分割成一个字符串数组。publicclassMain{publicstaticvoidmain(String[]args){Stringstr="Hello,World,Java";String[]parts=str......
  • JavaScript ajax下载文件
     JavaScriptAjaxhttpget方法,利用a标签下载文件流。文件流:django返回文件流示例fromdjango.httpimportStreamingHttpResponseclassDownloadExportExcel(View):defget(self,request,*args,**kwargs):file_name=request.GET.get("filename")......
  • Day03 JavaSE介绍与安装卸载
    1.Java三大版本javaSE:标准版(桌面程序,控制台程序开发)JavaME:精简版(嵌入式开发)javaEE:企业级开发(web开发,服务器开发)2.JDK、JRE、JVMJDK:javadevelopmentkitJRE:javaruntimeenvirnmentJVM:javavirtualmachine其中JDK包含了JRE与JVM。JRE包含了JVM。安装了JRE后......
  • Java中static、final、static final的区别
    finalfinal可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。final修饰的属性表明是一个常数(创建后不能被修改)。final修饰的方......
  • Java开发者的Python快速进修指南:面向对象基础
    当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的关键字,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确引用。正如Java,Python也......
  • Java基于协同过滤算法开发的springboot+vue服装商城
    演示视频https://www.bilibili.com/video/BV1oH4y127fq/?share_source=copy_web&vd_source=11344bb73ef9b33550b8202d07ae139b主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的订单,收货地址,编辑资料等。管理员可以发布商品,上下架商品,处......
  • Java基于springoot开发的企业招聘求职网站
    演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_source=copy_web&vd_source=11344bb73ef9b33550b8202d07ae139b技术:springoot+mysql+vuejs+bootstrap+poi+制作word模板主要功能:求职者可以注册发布简历,选择简历模板,上传简历,搜索职位,投递简历,给hr留言,查看自己投......
  • Java 程序里 transient 关键字的使用方法介绍
    在Java中,transient是一个关键字,主要被用于管理序列化过程中哪些字段需要被忽略。在序列化过程中,如果一个字段被声明为transient,那么这个字段就不会被序列化。什么是序列化呢?序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,序列化可以通过实现java.io......
  • Java开发者的Python快速进修指南:面向对象进阶
    在上一期中,我们对Python中的对象声明进行了初步介绍。这一期,我们将深入探讨对象继承、组合以及多态这三个核心概念。不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主要区别主要体现在语法上。例如,Python支持多重继承,这意味着一个类可以同时继承多个父类的属......