Java读取图片EXIF信息的方法
程序员文章站
2024-03-04 13:13:47
本文实例讲述了java读取图片exif信息的方法。分享给大家供大家参考。具体分析如下:
首先介绍一下什么是exif,exif是exchangeable image fil...
本文实例讲述了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程序设计有所帮助。