Do you drink java?



      像写情书一样coding

 

[Image] 读取数码照片中的EXIF信息

相信大家都有使用数码相机拍照的经历,一张数码照片可以包含的内容远远超过了我们当前观察到的景物,他可能包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。这些信息都是存放在一个叫做Exif的文件里,然后把Exif文件放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数。

我在网上找到一个开源的开发工具包Metadata-Extractor,使用它可以像ACDSee等图像软件一样读取数码照片的Exif信息。

我写了一个小Demo程序演示通过使用metadata-extractor-2.2.2读取数码照片的Exif信息并从Exif中读取图像缩略图。
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.*;

import com.drew.imaging.jpeg.*;
import com.drew.metadata.*;
import com.drew.metadata.exif.*;


 
public class ExifExtractor {
  
public ExifExtractor() {
  }


  
public static void main(String[] args) {
    
try {
      Metadata metadata 
= JpegMetadataReader.readMetadata(new File("o_P4140147.JPG.jpg"));

      Iterator directories 
= metadata.getDirectoryIterator();
      
while (directories.hasNext()) {
        Directory directory 
= (Directory) directories.next();

        Iterator tags 
= directory.getTagIterator();
        
while (tags.hasNext()) {
          Tag tag 
= (Tag) tags.next();

          
// modify Exif
//          if (tag.getTagName().equalsIgnoreCase("User Comment")) {
//                      Directory exifDirectory = metadata.getDirectory(ExifDirectory.class);
//                      exifDirectory.setString(tag.getTagType(), "LeonChen");
//          }

          
// read thumbnail
          if (tag.getTagName().equalsIgnoreCase("Thumbnail Data")) {
            Directory exifDirectory 
= metadata.getDirectory(ExifDirectory.class);

            
byte[] dataBuffer = exifDirectory.getByteArray(tag.getTagType());
            FileChannel channel 
= new RandomAccessFile(new File("thumbnail.jpg"),
                
"rw").getChannel();
            MappedByteBuffer fileBuffer 
= channel.map(FileChannel.MapMode.
                READ_WRITE, 
0, dataBuffer.length);
            fileBuffer.put(dataBuffer);
            fileBuffer.force();
            channel.close();
          }


          
// print exif
          System.out.println(tag);
        }

      }

    }

    
catch (FileNotFoundException ex) {
      ex.printStackTrace();
    }

    
catch (IOException ex) {
      ex.printStackTrace();
    }

    
catch (MetadataException ex) {
      ex.printStackTrace();
    }

    
catch (JpegProcessingException ex) {
      ex.printStackTrace();
    }

  }

}


我在上面的测试程序里注释了一段代码,他们可以在内存中修改Exif中某一节点的信息,但是我不知道怎样才能将修改后的Exif信息保存到文件,如果你知道方法,请给我留言。

测试图片下载地址:
http://www.blogjava.net/images/blogjava_net/leon/2174/o_P4140147.JPG

EXIF参考:
http://www.exif.org

posted on 2005-11-29 17:04 leon 阅读(2519) 评论(5)  编辑  收藏 所属分类: OpenSource

评论

# re: [Image]读取数码照片中的Exif信息 2005-11-30 13:19 elex

如果能Exif中的东西,是不是就意味着光圈和快门甚至相机品牌的数据都有可能更改?那EXIF还有什么意义。???
5~~~~~~~~~~~~~  回复  更多评论   

# re: [Image]读取数码照片中的Exif信息 2005-11-30 13:28 leon

我现在的用途是在程序里对一组底动态范围图像进行合成,调节图像的曝光值等,把调节后的图像重新编码保存,这时修改Exif信息,重新设置曝光值等就有意义。

或者你看在PS上处理过的照片,Exif里都会留下PS的痕迹。。。

Metadata-Extractor以后的版本可能会支持,就是不知道要等到猴年马月。。。

Future plans
Support for:
......
Writing metadata into media files
  回复  更多评论   

# re: [Image]读取数码照片中的Exif信息 2006-01-24 17:43 网者天下

呵呵,我也在看这方面的东西,好象保存要比读取难得多了  回复  更多评论   

# re: [Image]读取数码照片中的Exif信息 2006-01-24 20:50 leon

我想也不会太难,研究一下Exif格式然后自己向里面写。
只是不想这上面画太多功夫,觉得不值得,想偷懒找些第三方的库。  回复  更多评论   

# re: [Image] 读取数码照片中的EXIF信息 2007-03-29 15:30 游客

好东西,我一直在找这个。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

公告

DSC_0106.jpg
本博客已经搬家到CSDN
http://blog.csdn.net/chenweionline




常用链接

留言簿(5)

随笔分类

随笔档案

About Technology

My Favorite Website

搜索

积分与排名

最新评论

  • 1. re: 胃痉挛
  • 兄弟们你们都做胃镜了吗开的啥药?有什么养胃秘方啊?请赐教啊!
  • --我也进来了
  • 2. re: 胃痉挛
  • @痛啊
    我感觉比生孩子还疼,生孩子还能有意识呢!这种疼还叫不出来连说话的力气都没了
  • --我也进来了
  • 3. re: 胃痉挛
  • 评论内容较长,点击标题查看
  • --我也进来了
  • 4. re: 胃痉挛
  • 我都周期性的发作,算来有4年了 。每年最少一次,一次最少2天。吃了好多药就差没去做胃镜了。 刚刚发作就随便煮了点姜汤喝下就好了些,不知道还会不会发作了。
  • --许家洛
  • 5. re: 胃痉挛
  • 我昨晚也疼的要死。。上次疼的直接120送医院了,一上120我竟然就不疼了,医院里掉了瓶盐水就放回家了。这次正好国外旅游中,几乎疼了一整晚,整个在床上翻滚状态了。今天不疼了,就是整个人难受。。。求助阿
  • --胃疼
  • 6. re: [Swing]在 JFileChooser 中进行文件验证的小技巧
  • 输入*还是会有问题
  • --ngh
  • 7. re: 胃痉挛[未登录]
  • 昨晚一夜的身不如死的感觉,胃痉挛兄不要来了吧 ,求你了
  • --李飞
  • 8. re: 胃痉挛
  • 评论内容较长,点击标题查看
  • --daidai
  • 9. re: 胃痉挛
  • 评论内容较长,点击标题查看
  • --痛啊
  • 10. re: 胃痉挛
  • 妈啊 痛的快死了~!第一次感觉过这样的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
  • --痛啊

阅读排行榜