Java读取图片EXIF信息的方法
本文实例讲述了Java读取图片EXIF信息的方法。分享给大家供大家参考。具体分析如下:
首先介绍一下什么是EXIF,EXIF是ExchangeableImageFile的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性信息,例如相机的品牌及型号、相片的拍摄时间、拍摄时所设置的光圈大小、快门速度、ISO等等信息。除此之外它还能够记录拍摄数据,以及照片格式化方式,这样就可以输出到兼容EXIF格式的外设上,例如照片打印机等。
目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接显示图片的EXIF信息,包括现在的一些著名的相册网站也提供页面用于显示照片的EXIF信息。本文主要介绍Java语言如何读取图像的EXIF信息,包括如何根据EXIF信息对图像进行调整以适合用户浏览。
目前最简单易用的EXIF信息处理的Java包是DrewNoakes写的metadata-extractor,该项目最新的版本是2.3.4,支持EXIF2.2版本。你可以直接从http://www.drewnoakes.com/code/exif/下载该项目的最新版本包括其源码。
需要注意的是,并不是每个JPG图像文件都包含有EXIF信息,你可以在Windows资源管理器单击选中图片后,如果该图片包含EXIF信息,则会在属性->摘要中显示出来。
ExifTester.java如下:
importjava.io.File; importjava.util.Iterator; importcom.drew.imaging.jpeg.JpegMetadataReader; importcom.drew.metadata.Directory; importcom.drew.metadata.Metadata; importcom.drew.metadata.Tag; importcom.drew.metadata.exif.ExifDirectory; /** *测试用于读取图片的EXIF信息 *@authorWinterLau */ publicclassExifTester{ publicstaticvoidmain(String[]args)throwsException{ FilejpegFile=newFile("C:/1.JPG"); Metadatametadata=JpegMetadataReader.readMetadata(jpegFile); Directoryexif=metadata.getDirectory(ExifDirectory.class); Iteratortags=exif.getTagIterator(); while(tags.hasNext()){ Tagtag=(Tag)tags.next(); System.out.println(tag); } } }
运行结果:
[Exif]Make-OLYMPUSOPTICALCO.,LTD [Exif]Model-u10D,S300D,u300D [Exif]Orientation-Top,leftside(Horizontal/normal) [Exif]XResolution-72dotsperinch [Exif]YResolution-72dotsperinch [Exif]ResolutionUnit-Inch [Exif]Software-22-1012 [Exif]Date/Time-2005:04:1413:47:10 [Exif]YCbCrPositioning-Datumpoint [Exif]ExposureTime-0.01sec [Exif]F-Number-F5.2 [Exif]ExposureProgram-Programcreative(slowprogram) [Exif]ISOSpeedRatings-80 [Exif]ExifVersion-2.20 [Exif]Date/TimeOriginal-2005:04:1413:47:10 [Exif]Date/TimeDigitized-2005:04:1413:47:10 [Exif]ComponentsConfiguration-YCbCr [Exif]ExposureBiasValue-0EV [Exif]MaxApertureValue-F3.1 [Exif]MeteringMode-Multi-segment [Exif]LightSource-Unknown [Exif]Flash-Flashdidnotfire,auto [Exif]FocalLength-17.4mm [Exif]UserComment- [Exif]FlashPixVersion-1.00 [Exif]ColorSpace-sRGB [Exif]ExifImageWidth-1024pixels [Exif]ExifImageHeight-768pixels [Exif]FileSource-DigitalStillCamera(DSC) [Exif]WindowsXPTitle-风景 [Exif]WindowsXPAuthor-一路风尘 [Exif]WindowsXPKeywords-你是我的唯一 [Exif]WindowsXPSubject-我的第一张 [Exif]CustomRendered-Normalprocess [Exif]ExposureMode-Autoexposure [Exif]WhiteBalance-Autowhitebalance [Exif]DigitalZoomRatio-1 [Exif]SceneCaptureType-Landscape [Exif]GainControl-None [Exif]Contrast-None [Exif]Saturation-None [Exif]Sharpness-None [Exif]Unknowntag(0xc4a5)-80114105110116737704802-10... [Exif]Compression-JPEG(old-style) [Exif]ThumbnailOffset-2022bytes [Exif]ThumbnailLength-5864bytes [Exif]ThumbnailData-[5864bytesofthumbnaildata]
只读取某项信息:
packagetest; importjava.io.File; importjava.util.Iterator; importcom.drew.imaging.jpeg.JpegMetadataReader; importcom.drew.metadata.Directory; importcom.drew.metadata.Metadata; importcom.drew.metadata.Tag; importcom.drew.metadata.exif.ExifDirectory; /** *测试用于读取图片的EXIF信息 *@authorWinterLau */ publicclassPicExif{ publicstaticvoidmain(String[]args)throwsException{ FilejpegFile=newFile( "C:/1.JPG"); Metadatametadata=JpegMetadataReader.readMetadata(jpegFile); Directoryexif=metadata.getDirectory(ExifDirectory.class); Iteratortags=exif.getTagIterator(); if(exif.containsTag(ExifDirectory.TAG_WIN_AUTHOR)){ System.out.println("Picauthoris"+exif.getDescription(ExifDirectory.TAG_WIN_AUTHOR)); } if(exif.containsTag(ExifDirectory.TAG_WIN_TITLE)){ System.out.println("Pictitleis"+exif.getDescription(ExifDirectory.TAG_WIN_TITLE)); } if(exif.containsTag(ExifDirectory.TAG_WIN_KEYWORDS)){ System.out.println("Pickeywordis"+exif.getDescription(ExifDirectory.TAG_WIN_KEYWORDS)); } } }
希望本文所述对大家的java程序设计有所帮助。