1. 程式人生 > >java 讀取圖片的 Exif 資料

java 讀取圖片的 Exif 資料

包的下載地址:

package com.imgread;

import com.drew.metadata.*;
import com.drew.metadata.exif.*;
import com.drew.imaging.jpeg.JpegProcessingException;
import java.io.*;
import java.util.Iterator;

public class EXIFReader {

 public static void main(String args[]) throws FileNotFoundException {
  File f = new File("c://b.jpg");
  try {
   ExifReader er = new ExifReader(f);
   Metadata exif = er.extract();
   Iterator itr = exif.getDirectoryIterator();
   while (itr.hasNext()) {
    Directory directory = (Directory) itr.next();

    System.out.println("EXIF版本:" + directory.getString(ExifDirectory.TAG_EXIF_VERSION));  
    System.out.println("相機品牌:" + directory.getString(ExifDirectory.TAG_MAKE));  
    System.out.println("相機型號:" + directory.getString(ExifDirectory.TAG_MODEL));  
    System.out.println("光 圈 值:" + directory.getString(ExifDirectory.TAG_FNUMBER));  
    System.out.println("快    門:" + directory.getString(ExifDirectory.TAG_EXPOSURE_TIME));  
    System.out.println("感 光 度:" + directory.getString(ExifDirectory.TAG_ISO_EQUIVALENT));
    System.out.println("軟    件:" + directory.getString(ExifDirectory.TAG_SOFTWARE));
    System.out.println("原始拍攝時間:" + directory.getString(ExifDirectory.TAG_DATETIME_ORIGINAL));
    System.out.println("數字化時間:" + directory.getString(ExifDirectory.TAG_DATETIME_DIGITIZED));
    System.out.println("方    向:" + directory.getString(ExifDirectory.TAG_ORIENTATION));
    System.out.println("圖片寬度:" + directory.getString(ExifDirectory.TAG_EXIF_IMAGE_WIDTH));
    System.out.println("圖片高度:" + directory.getString(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT));
    System.out.println("水平解析度:" + directory.getString(ExifDirectory.TAG_X_RESOLUTION));
    System.out.println("垂直解析度:" + directory.getString(ExifDirectory.TAG_Y_RESOLUTION));
    System.out.println("垂直解析度:" + directory.getString(ExifDirectory.TAG_EXPOSURE_BIAS));
    break;

    //獲得全部metadata  
    /*Iterator tags = directory.getTagIterator();
    while (tags.hasNext()) {
     Tag tag = (Tag) tags.next();
     System.out.println(tag);
    }
    if (directory.hasErrors()) {
     Iterator errors = directory.getErrors();
     while (errors.hasNext()) {
      System.out.println("ERROR:   " + errors.next());
     }
    }*/
   }
  } catch (JpegProcessingException e) {
   System.err.println("not   jpeg   file");
  }

 }

方法說明:

Image Description 影象描述、來源. 指生成影象的工具
Artist作者 有些相機可以輸入使用者的名字
Make 生產者 指產品生產廠家
Model 型號 指裝置型號
Orientation方向 有的相機支援,有的不支援
XResolution/YResolution X/Y方向解析度本欄目已有專門條目解釋此問題。
ResolutionUnit解析度單位 一般為PPI
Software軟體 顯示韌體Firmware版本
DateTime日期和時間
YCbCrPositioning 色相定位
ExifOffsetExif資訊位置,定義Exif在資訊在檔案中的寫入,有些軟體不顯示。
ExposureTime 曝光時間 即快門速度
FNumber光圈係數
ExposureProgram曝光程式指程式式自動曝光的設定,各相機不同,可能是Sutter Priority(快門優先)、Aperture Priority(快門優先)等等。
ISO speed ratings感光度
ExifVersionExif版本
DateTimeOriginal建立時間
DateTimeDigitized數字化時間
ComponentsConfiguration影象構造(多指色彩組合方案)
CompressedBitsPerPixel(BPP)壓縮時每畫素色彩位 指壓縮程度
ExposureBiasValue曝光補償。
MaxApertureValue最大光圈
MeteringMode測光方式, 平均式測光、中央重點測光、點測光等。
Lightsource光源 指白平衡設定
Flash是否使用閃光燈。
FocalLength焦距,一般顯示鏡頭物理焦距,有些軟體可以定義一個係數,從而顯示相當於35mm相機的焦距 MakerNote(User Comment)作者標記、說明、記錄
FlashPixVersionFlashPix版本 (個別機型支援)
ColorSpace色域、色彩空間
ExifImageWidth(Pixel X Dimension)影象寬度 指橫向畫素數
ExifImageLength(Pixel Y Dimension)影象高度 指縱向畫素數
Interoperability IFD通用性擴充套件項定義指標和TIFF檔案相關,具體含義不詳
FileSource原始檔 Compression壓縮比。