首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 核心技术 >> 高级编程 >> 正文

读取数码照片中的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 ,多提意见,今天就说这些,下次想想带点什么好玩的来。

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性
 ·桌面应用软件编程 J2SE技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航