Android 编辑图片EXIF信息

来源:互联网 发布:搜狗拼音打字软件 编辑:程序博客网 时间:2024/05/01 18:23

视频截图不同于Camera拍出的照片,默认没有被系统添加上EXIF信息,不过我们可以手动添加一些需要的信息,如下:


插入经纬度:

try {ExifInterface exif = new ExifInterface(imagePath);// 经度String strLongitude = sharedPreferences.getString("longitude","0.00");double intLongitude = Double.parseDouble(strLongitude);exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, strLongitude);exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF,intLongitude > 0.0f ? "E" : "W");// 纬度String strLatitude = sharedPreferences.getString("latitude", "0.00");double intLatitude = Double.parseDouble(strLatitude);exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, strLongitude);exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF,intLatitude > 0.0f ? "N" : "S");exif.saveAttributes();} catch (Exception e) {MyLog.e("[Android]Set Attribute Catch Exception:" + e.toString());e.printStackTrace();}

其他常用的EXIF信息:

我发现除了MAKE,MODEL,ORIENTATION和以上代码中提到的位置相关的TAG可以使用Android提供的android.media.ExifInterface成功操作。其他的一些TAG虽然写到了EXIF里,但是在PC端使用PowerEXIF工具查看,虽然数字代码是正确的,但是规范名称却没有显示出来,而且内容格式出现问题。

初步怀疑是数据格式的问题,RATIONAL有理数什么的。但是ExifInterface的setAttribute方法的两个参数都是String。

由于项目时间比较赶,也没有深究原因,直接使用了三方开源库“JpegHeaders”操作图片的EXIF信息。


链接:http://jheader.sourceforge.net/index.html

代码操作:

// 修改EXIF// exifHeader.setValue(Tag.DATETIMEORIGINAL, "2015:05:55 05:55:55");exifHeader.setValue(Tag.ORIENTATION, "1"); // 浏览模式/方向:上/左exifHeader.setValue(Tag.APERTUREVALUE, "11/5"); // 光圈:2.2exifHeader.setValue(Tag.FOCALLENGTH, "7/2"); // 焦距:3.5mmexifHeader.setValue(Tag.WHITEBALANCE, "0"); // 白平衡:0-自动exifHeader.setValue(Tag.ISOSPEEDRATINGS, "100"); // ISO感光度:100exifHeader.setValue(Tag.EXPOSURETIME, valueExposure); // 曝光时间:1/30// 曝光补偿:EV值每增加1.0,相当于摄入的光线量增加一倍,如果照片过亮,要减小EV值,EV值每减小1.0,相当于摄入的光线量减小一倍exifHeader.setValue(Tag.EXPOSUREBIASVALUE, valueExposureBias);exifHeader.setValue(Tag.METERINGMODE, valueMeteringMode); // 测光模式:1-平均exifHeader.setValue(Tag.SATURATION,valueSaturation); // 饱和度exifHeader.setValue(Tag.FLASH, "0"); // 闪光灯:未使用// 保存,参数:是否保存原文件为.oldjpegHeaders.save(false);





0 0