Jpge格式是图片压缩格式的一种,jpg就属于这其中一种;我们如需要将gps信息写入到图片中本身是比较简单的,获取图片句柄ExifInterface就可以了;但是我在做的过程中碰到了几个问题,解决之后便考虑将这一块写出来供大家参考。
写入GPS信息到jpeg格式的图片一共三个步骤,获取句柄,写入信息,验证写入信息
// 获取图片前缀 ExifInterfaceexif = newExifInterface(filePath);
// 写入经度信息 exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, this.gpsInfoConvert(jingdu)); exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, jingdu> 0 ? "E": "W"); // 写入纬度信息 exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, gpsInfoConvert(weidu)); exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, weidu> 0 ? "N": "S"); // 执行保存 exif.saveAttributes();上面的代码中jingdu和weidu都是已经申明并得到复制的变量,代表经纬度;最后的执行保存一定要操作,否则信息可能写入不成功。
ExifInterface exiftest = null; exiftest= newExifInterface(filePath); this.printMessage("写完后的校验:", exiftest);这个printMessage函数是自定义的信息输出函数,旨在读出图片中的GPS信息,以验证。
private void printMessage(String tag, ExifInterface e) { System.out.println(tag + "\n" + e.getAttribute(ExifInterface.TAG_GPS_LATITUDE) + "\n" + e.getAttribute(ExifInterface.TAG_GPS_LONGITUDE) + "\n" + e.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD) + "\n" + e.getAttribute(ExifInterface.TAG_IMAGE_LENGTH) + "\n" + e.getAttribute(ExifInterface.TAG_IMAGE_WIDTH));
1、 上面比较重要的地方有两处,第一是new ExifInterface(filePath)这里的参数是指的绝对路径加文件名,ExifInterface这个类其实不是借口尽管它这么写了;其次即使你写的路径不对,它也不会报错甚至提示,这就导致路径不对不易发现,我当时就犯了这种错误,没有及时发现浪费了时间
2、 一定要记得执行保存;写入的经纬度信息直接将通过百度地图得到的经纬度信息写进去会有问题,格式不对,必须经由gpsInforConvert(double aa)函数进行转换,这个函数也是我自定义的,发现格式不对对照标准格式写的。
格式转换函数:
private String gpsInfoConvert(double gpsInfo) { gpsInfo= Math.abs(gpsInfo); Stringdms = Location.convert(gpsInfo, Location.FORMAT_SECONDS); String[]splits = dms.split(":"); String[]secnds = (splits[2]).split("\\."); Stringseconds; if (secnds.length == 0) { seconds= splits[2]; }else{ seconds= secnds[0]; } return splits[0] + "/1," + splits[1] + "/1," + seconds + "/1"; }
(因为实例中需要获取GPS信息,因此源码中已经使用了百度地图的sdk,输入自己的key之后便可以直接使用获取GPS信息写入到jpeg图片中)
写入GPS信息到jpeg格式的图片中 ExifInterface类的使用
原文地址:http://blog.csdn.net/feishangbeijixing/article/details/42397189