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才能,拿到經緯度資訊,而且因為各個廠商的修改,沒有找到通過程式碼開啟照相機GPS的api,更有甚者,魅藍note就壓根連手動進入設定都找不到。我最後是整合百度sdk,去完成這部分功能的。
2. 修改ExifInterface資訊,儲存無效。
mExif.setAttribute(ExifInterface.TAG_MAKE, "大華為");
mExif.saveAttributes();
然並卵,麼得用,下次讀取還是這樣。
原始碼地址
http://download.csdn.net/detail/fly_saint/9315033