欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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程序设计有所帮助。