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.aygfsteel.com/images/blogjava_net/leon/2174/o_P4140147.JPG

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

          posted on 2005-11-29 17:04 leon 閱讀(2588) 評論(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: 胃痙攣
          • 媽啊 痛的快死了~!第一次感覺過這樣的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
          • --痛啊

          閱讀排行榜

          主站蜘蛛池模板: 息烽县| 神农架林区| 汕头市| 九龙县| 西峡县| 澄城县| 昆明市| 镇平县| 武清区| 北辰区| 民勤县| 湖南省| 绥棱县| 马山县| 台州市| 屯昌县| 和龙市| 大姚县| 射阳县| 邵阳县| 浮山县| 岱山县| 岑溪市| 马龙县| 时尚| 交口县| 广饶县| 永城市| 彭山县| 广东省| 冷水江市| 电白县| 博白县| 青岛市| 中牟县| 当涂县| 德惠市| 会理县| 平度市| 观塘区| 明溪县|