H5W3
当前位置:H5W3 > 其他技术问题 > 正文

读取数码照片中的Exif信息

 好久没有来JR了,大概有1年多了,之前一直“野”在外面,这次回来给大家带来点好玩的技术,这次给大家说一下怎样读取数码照片里的Exif信息。其实数码照片文件中除了Exif,还有GPS、相机厂商信息等,这些都会在相机拍摄时写入照片中,大家可以下载一个Opanda IExif 2.25软件玩玩。接下来说的是怎样使用我们喜欢的Java语言来读取,首页需要一个第三方的类包附件,这是个老外写的好不容易找到的。然后就是写个测试类了。

  1. package com.artozi.util.image;
  2. import java.io.*;
  3. import java.sql.*;
  4. import java.util.*;
  5. import com.drew.imaging.jpeg.*;
  6. import com.drew.metadata.*;
  7. import com.drew.metadata.exif.ExifDirectory;
  8. public class ExifInfoWrapper {
  9.     private Directory exifDirectory = null;
  10.     private static ExifInfoWrapper eiw = null;
  11.     public static ExifInfoWrapper getInstance(String filename){
  12.         if (eiw == null) {
  13.             eiw = new ExifInfoWrapper(filename);
  14.         }
  15.         return eiw;
  16.     }
  17.     public ExifInfoWrapper(String filename){
  18.         File jpegFile = new File(filename);
  19.         try {
  20.             Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); //读取jpeg源数据信息
  21.             exifDirectory = metadata.getDirectory(ExifDirectory.class); //读取jpeg中exif目录
  22.         } catch (JpegProcessingException je) {
  23.             System.out.println(je);
  24.         } catch (Exception ex) {
  25.             System.out.println(ex);
  26.         }
  27.     }
  28.     public String getPhotoCreatTime() {
  29.         String time = null;
  30.         try {
  31.             if(exifDirectory.containsTag(ExifDirectory.TAG_DATETIME_ORIGINAL)){
  32.                 java.util.Date d = exifDirectory.getDate(ExifDirectory.
  33.                         TAG_DATETIME_ORIGINAL); //将exif中的日期信息读出
  34.                 Timestamp ts = new Timestamp(d.getTime());
  35.                 time = ts.toString();
  36.             }else{
  37.                 time = “”;
  38.             }
  39.         } catch (MetadataException ex) {
  40.             System.out.println(ex);
  41.             time = “”;
  42.         } catch(Exception e){
  43.             System.out.println(e);
  44.             time = “”;
  45.         }finally{
  46.             return time;
  47.         }
  48.     }
  49.     public String showCrameBrand(){
  50.         String brand = null;
  51.         try {
  52.             if(exifDirectory.containsTag(ExifDirectory.TAG_MODEL)){
  53.                 brand = exifDirectory.getString(ExifDirectory.
  54.                         TAG_MODEL); //将exif中的日期信息读出
  55.                
  56.                 
  57.             }else{
  58.                 brand = “”;
  59.             }
  60.         } catch(Exception e){
  61.             System.out.println(e);
  62.         }finally{
  63.             return brand;
  64.         }
  65.     }
  66.     
  67.     public static void main(String[] args) {
  68.         ExifInfoWrapper e = ExifInfoWrapper.getInstance(“path”);
  69.         System.out.println(e.getPhotoCreatTime());
  70.         System.out.println(e.showCrameBrand());
  71.     }
  72. }

之后大家在main方法中填入自己照片的路径,然后大家看吧,我只显示了拍摄日期和相机型号,ExifDirectory是个常量类里面有很多属性,大家感兴趣的话可以试试其他的,我已经把这个小技术用在我自己的网站中 artozi ,多提意见,今天就说这些,下次想想带点什么好玩的来。

本文地址:H5W3 » 读取数码照片中的Exif信息

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址