java exif 语言编码_Java读取图片EXIF信息的代码

Java读取图片EXIF信息的代码

本文实例讲述了Java读取图片EXIF信息的方法。分享给大家供大家参考。具体分析如下:

首先介绍一下什么是EXIF,EXIF是Exchangeable Image File的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性信息,例如相机的品牌及型号、相片的拍摄时间、拍摄时所设置 的光圈大小、快门速度、ISO等等信息。除此之外它还能够记录拍摄数据,以及照片格式化方式,这样就可以输出到兼容EXIF格式的外设上,例如照片打印机 等。

目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接显示图片的EXIF信息,包括现在的一些著名的`相册网站也提供页面用于 显示照片的EXIF信息。本文主要介绍Java语言如何读取图像的EXIF信息,包括如何根据EXIF信息对图像进行调整以适合用户浏览。

目前最简单易用的EXIF信息处理的Java包是Drew Noakes写的metadata-extractor,该项目最新的版本是2.3.4,支持EXIF 2.2版本。你可以直接从http://www.drewnoakes.com/code/exif/ 下载该项目的最新版本包括其源码。

需要注意的是,并不是每个JPG图像文件都包含有EXIF信息,你可以在Windows资源管理器单击选中图片后,如果该图片包含EXIF信息,则会在属性->摘要中显示出来。

ExifTester.java如下:

import java.io.File;import java.util.Iterator;import com.drew.imaging.jpeg.JpegMetadataReader;import com.drew.metadata.Directory;import com.drew.metadata.Metadata;import com.drew.metadata.Tag;import com.drew.metadata.exif.ExifDirectory;/** * 测试用于读取图片的EXIF信息 * @author Winter Lau */public class ExifTester { public static void main(String[] args) throws Exception { File jpegFile = new File("C:/1.JPG"); Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); Directory exif = metadata.getDirectory(ExifDirectory.class); Iterator tags = exif.getTagIterator(); while (tags.hasNext()) { Tag tag = (Tag)tags.next(); System.out.println(tag); } }}

运行结果:

[Exif] Make - OLYMPUS OPTICAL CO.,LTD[Exif] Model - u10D,S300D,u300D[Exif] Orientation - Top, left side (Horizontal / normal)[Exif] X Resolution - 72 dots per inch[Exif] Y Resolution - 72 dots per inch[Exif] Resolution Unit - Inch[Exif] Software - 22-1012 [Exif] Date/Time - 2005:04:14 13:47:10[Exif] YCbCr Positioning - Datum point[Exif] Exposure Time - 0.01 sec[Exif] F-Number - F5.2[Exif] Exposure Program - Program creative (slow program)[Exif] ISO Speed Ratings - 80[Exif] Exif Version - 2.20[Exif] Date/Time Original - 2005:04:14 13:47:10[Exif] Date/Time Digitized - 2005:04:14 13:47:10[Exif] Components Configuration - YCbCr[Exif] Exposure Bias Value - 0 EV[Exif] Max Aperture Value - F3.1[Exif] Metering Mode - Multi-segment[Exif] Light Source - Unknown[Exif] Flash - Flash did not fire, auto[Exif] Focal Length - 17.4 mm[Exif] User Comment - [Exif] FlashPix Version - 1.00[Exif] Color Space - sRGB[Exif] Exif Image Width - 1024 pixels[Exif] Exif Image Height - 768 pixels[Exif] File Source - Digital Still Camera (DSC)[Exif] Windows XP Title - 风景[Exif] Windows XP Author - 一路风尘[Exif] Windows XP Keywords - 你是我的唯一[Exif] Windows XP Subject - 我的第一张[Exif] Custom Rendered - Normal process[Exif] Exposure Mode - Auto exposure[Exif] White Balance - Auto white balance[Exif] Digital Zoom Ratio - 1[Exif] Scene Capture Type - Landscape[Exif] Gain Control - None[Exif] Contrast - None[Exif] Saturation - None[Exif] Sharpness - None[Exif] Unknown tag (0xc4a5) - 80 114 105 110 116 73 77 0 480 2 -10...[Exif] Compression - JPEG (old-style)[Exif] Thumbnail Offset - 2022 bytes[Exif] Thumbnail Length - 5864 bytes[Exif] Thumbnail Data - [5864 bytes of thumbnail data]

只读取某项信息:

package test;import java.io.File;import java.util.Iterator;import com.drew.imaging.jpeg.JpegMetadataReader;import com.drew.metadata.Directory;import com.drew.metadata.Metadata;import com.drew.metadata.Tag;import com.drew.metadata.exif.ExifDirectory;/** * 测试用于读取图片的EXIF信息 * @author Winter Lau */public class PicExif { public static void main(String[] args) throws Exception { File jpegFile = new File( "C:/1.JPG"); Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); Directory exif = metadata.getDirectory(ExifDirectory.class); Iterator tags = exif.getTagIterator(); if(exif.containsTag(ExifDirectory.TAG_WIN_AUTHOR)){ System.out.println("Pic author is "+exif.getDescription(ExifDirectory.TAG_WIN_AUTHOR)); } if(exif.containsTag(ExifDirectory.TAG_WIN_TITLE)){ System.out.println("Pic title is "+exif.getDescription(ExifDirectory.TAG_WIN_TITLE)); } if(exif.containsTag(ExifDirectory.TAG_WIN_KEYWORDS)){ System.out.println("Pic keyword is "+exif.getDescription(ExifDirectory.TAG_WIN_KEYWORDS)); } }}

希望本文所述对大家的java程序设计有所帮助。

【Java读取图片EXIF信息的代码】相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java和pathion_Spring配置中的classpath:与classpath*:的区别

概念解释及使用场景:classpath是指WEB-INF文件夹下的classes目录。通常我们一般使用这种写法实在web.xml中,比如spring加载bean的上下文时,如下:contextConfigLocationclasspath*:/spring-context-*.xmlorg.springframework.web.c…

PHP单引号 ' ',没有任何意义,对所引内容不经任何处理直接拿过来

单引号 没有任何意义,对单引号内部内容不经任何处理直接拿过来。转载于:https://www.cnblogs.com/npk19195global/p/4490758.html

UILabel 宽高自适应

在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextView,UITableViewCell等的高度的情况,这个时候就需要动态的计算字符串内容的高度,下面是计算的方法: /** method 获取指定宽度情况ixa,字符串…

php debug build no,php – 尝试安装xdebug:找不到配置文件

我按照这些说明下载xdebug:http://xdebug.org/wizard.php.向导的输出是这样的:SummaryXdebug installed: noServer API: Apache 2.0 HandlerWindows: noZend Server: noPHP Version: 5.4.17Zend API nr: 220100525PHP API nr: 20100525Debug Build: noTh…

自动自发

<自动自发> 第1章 序言 你属于哪种人&#xff1f; 我们经常会听到这些熟悉的话语&#xff1a; “现在是午餐时间&#xff0c;请您3点以后再打过来吧。” “那根本就不是我负责的工作。” “我现在很忙。” “那是汉曼的工作。” “我不知道该怎样帮助你。” “你去图书馆…

php修改js内容,js怎样修改html元素的内容?HTML DOM实现修改内容

js怎样修改html元素的内容&#xff1f;本章就给大家介绍在js中利用HTML DOM是怎样修改html元素内容的。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你们有所帮助。首先我们要了解HTML DOM是什么&#xff1f;HTML DOM的作用是什么&#xff1f;HTML…

java中的删除函数的使用方法,如何用Java删除文件

本文概述有两种删除Java文件的方法&#xff1a;使用File.delete()方法使用File.deleteOnExit()方法Java File.delete()方法在Java中, 我们可以使用File类的File.delete()方法删除文件。 delete()方法删除由抽象路径名表示的文件或目录。如果路径名是目录, 则该目录必须为空才能…

windows操作笔记

使用服务或其他windows应用的过程中&#xff0c;可能会遇到莫名其妙的错误&#xff0c;这时候从控制面板中&#xff0c;找到管理工具&#xff0c;打开事件查看器&#xff0c;或者通过计算机管理&#xff0c;找到日志中的记录&#xff0c;如果是代码错误&#xff0c;会给出提示信…

php smarty模板配置,Smarty模板简单配置与使用方法示例

这篇文章主要介绍了Smarty模板简单配置与使用方法,涉及Smarty模板的基本配置与缓存文件的相关使用技巧,需要的朋友可以参考下本文实例讲述了Smarty模板简单配置与使用方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;在Smarty目录中建立templates,templates_c,conf…

C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

C#开发微信门户及应用(28)--微信“摇一摇周边”功能的使用和接口的实现 原文:C#开发微信门户及应用(28)--微信“摇一摇周边”功能的使用和接口的实现”摇一摇周边“是微信提供的一种新的基于位置的连接方式。用户通过“摇一摇”的“周边”页卡&#xff0c;可以与线下商户进行互…

php控制器实现自动映射,PHP实现路由映射到指定控制器

自定义路由的功能&#xff0c;指定到pathinfo的url上,再次升级之前的脚本SimpleLoader.phpclass SimpleLoader{public static function run($rulesarray()){header("content-type:text/html;charsetutf-8");self::register();self::commandLine();self::router($rule…

【计算几何】点在多边形内部

问题描述&#xff1a;已知点P(x,y)和多边形Poly&#xff0c;判断点P(x,y)是否在多边形内部。 基本方法&#xff1a;射线法 以点P为端点&#xff0c;向左方作射线L&#xff0c;由于多边形是有界的&#xff0c;所以射线L的左端一定在多边形外部&#xff0c;考虑沿着L从无究远处开…

php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记

phalcon(费尔康)框架学习笔记以实例程序invo为例(invo程序放在网站根目录下的invo文件夹里&#xff0c;推荐php版本>5.4)环境不支持伪静态网址时的配置第一步&#xff1a;在app\config\config.ini文件中的[application]节点内修改baseUri参数值为/invo/index.php/或/invo/in…

php查找空白行,如何从PHP文本中删除空白行?

小编典典// New line is required to split non-blank linespreg_replace("/(^[\r\n]*|[\r\n])[\s\t]*[\r\n]/", "\n", $string);上面的正则表达式说&#xff1a;/(^[\r\n]*|[\r\n])[\s\t]*[\r\n]/1st Capturing group (^[\r\n]*|[\r\n])1st Alternative: …

Hungary(匈牙利算法)——二分图最大匹配

在复习匈牙利算法的时候&#xff0c;发现这么一篇介绍匈牙利算法的文章&#xff0c;非常通俗易懂&#xff0c;所以就借鉴过来了。 复杂度&#xff1a;邻接矩阵&#xff1a;O&#xff08;v^3&#xff09;邻接表&#xff1a;O&#xff08;V*E&#xff09; 附上链接&#xff1a;趣…

js图片压缩java上传,JS实现异步上传压缩图片

摘要: 使用iframe来处理异步上传图片&#xff0c;在现在这个时代来说&#xff0c;多多少少都有点落后了&#xff01;单单就凭AJAX和JS就不能做到异步上传图片了吗&#xff1f;先看调用页面&#xff1a;选择图片var img;$("input:file").change(function (){//console…

白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...

转自&#xff1a;http://wenda.tianya.cn/wenda/thread?tid758a1e447e62b7df&hlja 白盒测试作为测试人员常用的一种测试方法&#xff0c;越来越受到测试工程师的重视。白盒测试并不是简单的按照代码设计用例&#xff0c;而是需要根据不同的测试需求&#xff0c;结合不同的…

matlab getsplitpic,MATLAB_9-模式识别笔记

1&#xff0c;识别单独字符的&#xff1a;思想&#xff1a;picsize[20,10];创建一个矩阵&#xff0c;将两个照片整理成大小一致的。具体就是使用后面的&#xff1a;aimresize(a,picsize);fontsABCDEFGHNVJXSMQ;建立字符串用于匹配输出(就是识别的功能&#xff01;)下面一个for循…

浅谈android4.0开发之GridLayout布局

作者:李响 本文重点讲述了自android4.0版本号后新增的GridLayout网格布局的一些基本内容&#xff0c;并在此基础上实现了一个简单的计算器布局框架。通过本文&#xff0c;您可以了解到一些android UI开发的新特性&#xff0c;并可以实现相关应用。 在android4.0版本号之…

解扰matlab,数据序列扰乱与解扰MATLAB实现及性能分析—利用m序列.doc

数据序列扰乱与解扰MATLAB实现及性能分析—利用m序列《数据序列的扰乱与解扰的MATLAB实现及性能分析—利用17级m序列》 第 PAGE 1页 共20页数据序列的扰乱与解扰的MATLAB实现及性能分析—利用17级m序列学生姓名&#xff1a; 指导老师&#xff1a;摘要 本课程设计主要为了进一步…