服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - java读取照片Exif信息到实体类

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

2023-12-03 01:05未知服务器之家 Java教程

java读取照片Exif信息到实体类 前言 1.总共读出来了228个参数信息,但是我挑选了36个我认为比较有价值的参数,弄成了实体类 (其实是因为很多参数我看不明白是啥意思) 2.为了方便,所以实体类里我直接用中文字段了 效果图 导

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

前言

1.总共读出来了228个参数信息,但是我挑选了36个我认为比较有价值的参数,弄成了实体类
(其实是因为很多参数我看不明白是啥意思)
2.为了方便,所以实体类里我直接用中文字段了

效果图

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

导入依赖

        <!-- 读取照片元信息 -->
        <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教程hibernate 常用方法介绍

    hibernate 常用方法介绍

    这篇文章介绍了hibernate的常用方法,有需要的朋友可以参考一下 ...

    java之家5062019-10-15
  • Java教程java门禁系统面向对象程序设计

    java门禁系统面向对象程序设计

    这篇文章主要为大家详细介绍了java门禁系统面向对象程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zhupengqq5482021-07-11
  • Java教程浅谈 java中ArrayList、Vector、LinkedList的区别联系

    浅谈 java中ArrayList、Vector、LinkedList的区别联系

    ArrayList,Vector底层是由数组实现,LinkedList底层是由双线链表实现,从底层的实现可以得出性能问题ArrayList,Vector插入速度较慢,查询速度较快,而LinkedList插入...

    hebedich3592020-01-21
  • Java教程Java的抽象类 &amp; 接口

    Java的抽象类 &amp; 接口

    抽象类:在子类继承父类时,父类的一些方法实现是不明确的(父类对子类的实现一无所知)。这时需要使父类是抽象类,在子类中提供方法的实现。接口...

    未知2072023-05-11
  • Java教程java web实现网上手机销售系统

    java web实现网上手机销售系统

    这篇文章主要为大家详细介绍了java web实现网上手机销售系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    mathor-sinor9452021-11-22
  • Java教程Java中的锁分类的详细介绍

    Java中的锁分类的详细介绍

    这篇文章主要介绍了Java中的锁分类的详细介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    byhieg8032020-12-28
  • Java教程Java实现查找当前字符串最大回文串代码分享

    Java实现查找当前字符串最大回文串代码分享

    本文给大家介绍的是如何使用Java实现查找当前字符串最大回文串代码,非常的简单实用,有需要的小伙伴可以参考下 ...

    java教程网6212020-05-29
  • Java教程Selenium处理select标签的下拉框

    Selenium处理select标签的下拉框

    Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行。接下来通过本文给大家介绍Selenium处理...

    虫师7232020-04-16