服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 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 ,多提意见,今天就说这些,下次想想带点什么好玩的来。

扫描关注微信公众号