通过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