1. 程式人生 > >Android 圖片資訊獲取--ExifInterface類

Android 圖片資訊獲取--ExifInterface類

通過Exfi獲取照片相關資訊。

因為公司出了這個需求,所以研究了下,這個比較簡單,其實就是拿到照片後,通過ExifInterface類獲取到照片的相關資訊。問題發現了一些,比如經緯度屬性獲取不穩定偏差大,修改後ExifInterface並沒有真正的儲存到本地檔案中等,最後我是通過整合百度SDK完成這方面的功能,各種不給力呀

參考:

TAG_DATETIME 時間日期 

TAG_FLASH 閃光燈 

TAG_GPS_LATITUDE 緯度 

TAG_GPS_LATITUDE_REF 緯度參考

TAG_GPS_LONGITUDE 經度 

TAG_GPS_LONGITUDE_REF 經度參考 

TAG_IMAGE_LENGTH 圖片長

TAG_IMAGE_WIDTH 圖片寬 

TAG_MAKE 裝置製造商 

TAG_MODEL 裝置型號 

TAG_ORIENTATION 方向

TAG_WHITE_BALANCE 白平衡

步驟

1. 拿到ExifInterface

 mExif = new ExifInterface(filename);

2. 通過ExifInterface拿到各個資訊

String date = exif.getAttribute(ExifInterface.TAG_DATETIME);

String flash = exif.getAttribute(ExifInterface.TAG_FLASH);

String latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);

String latitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);

String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);

String longitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);

String image_length = exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);

String image_width = exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);

String make = exif.getAttribute(ExifInterface.TAG_MAKE);

String model = exif.getAttribute(ExifInterface.TAG_MODEL);

String orientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);

String white_balance = exif.getAttribute(ExifInterface.TAG_WHITE_BALANCE);

3. 修改ExifInterface資訊

   if( mExif  !=  null){

       mExif.setAttribute(ExifInterface.TAG_MAKE,  "大華為");

     try {

mExif.saveAttributes();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

     }

效果

上半部分是原圖效果,下半部分修改過的資訊,只改了一個生產廠商

問題:

1. 經緯度難以獲取。

首先,必須要設定照相機開啟GPS才能,拿到經緯度資訊,而且因為各個廠商的修改,沒有找到通過程式碼開啟照相機GPSapi,更有甚者,魅藍note就壓根連手動進入設定都找不到。我最後是整合百度sdk,去完成這部分功能的。

2. 修改ExifInterface資訊,儲存無效。

mExif.setAttribute(ExifInterface.TAG_MAKE,  "大華為");

mExif.saveAttributes();

然並卵,麼得用,下次讀取還是這樣。

 原始碼地址

http://download.csdn.net/detail/fly_saint/9315033