写入GPS信息到jpeg格式的图片中 ExifInterface类的使用
2017-12-21 19:37
706 查看
Jpge格式是图片压缩格式的一种,jpg就属于这其中一种;我们如需要将gps信息写入到图片中本身是比较简单的,获取图片句柄ExifInterface就可以了;但是我在做的过程中碰到了几个问题,解决之后便考虑将这一块写出来供大家参考。
写入GPS信息到jpeg格式的图片一共三个步骤,获取句柄,写入信息,验证写入信息
[java] view
plain copy
// 获取图片前缀
ExifInterfaceexif = newExifInterface(filePath);
这里关键的一点是filepath这个参数,这是文件的绝对路径加文件名(肯定是包含文件的后缀名的!)
[java] view
plain copy
// 写入经度信息
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都是已经申明并得到复制的变量,代表经纬度;最后的执行保存一定要操作,否则信息可能写入不成功。
[java] view
plain copy
ExifInterface exiftest = null;
exiftest= newExifInterface(filePath);
this.printMessage("写完后的校验:", exiftest);
这个printMessage函数是自定义的信息输出函数,旨在读出图片中的GPS信息,以验证。
[java] view
plain copy
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)函数进行转换,这个函数也是我自定义的,发现格式不对对照标准格式写的。
格式转换函数:
[java] view
plain copy
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格式的图片一共三个步骤,获取句柄,写入信息,验证写入信息
第一步:获取句柄
[java] viewplain copy
// 获取图片前缀
ExifInterfaceexif = newExifInterface(filePath);
这里关键的一点是filepath这个参数,这是文件的绝对路径加文件名(肯定是包含文件的后缀名的!)
第二步:写入信息
[java] viewplain copy
// 写入经度信息
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都是已经申明并得到复制的变量,代表经纬度;最后的执行保存一定要操作,否则信息可能写入不成功。
第三步:验证写入信息
[java] viewplain copy
ExifInterface exiftest = null;
exiftest= newExifInterface(filePath);
this.printMessage("写完后的校验:", exiftest);
这个printMessage函数是自定义的信息输出函数,旨在读出图片中的GPS信息,以验证。
[java] view
plain copy
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)函数进行转换,这个函数也是我自定义的,发现格式不对对照标准格式写的。
格式转换函数:
[java] view
plain copy
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类的使用
- 写入GPS信息到jpeg格式的图片中 ExifInterface类的使用
- java复制图片EXIF信息(支持jpeg格式),使用了MediaUtils
- 使用ExifInterface获取图片信息
- 将GPS信息写入到图片里
- 使用ImageIO保留EXIF信息的图片
- Android多媒体- ExifInterface读取图片相关信息
- 使用 metadata-extractor 解析图片 exif 元数据信息
- jpg图片的Exif及gps信息和示例分析
- 通过ExifInterface 读取图片信息
- 在Android下通过ExifInterface类操作图片的Exif信息
- 通过ExifInterface 读取图片信息
- ExifInterface 获取图片信息 记录一下
- 给图片文件写入exif信息(ios)
- Android中通过Exifinterface读取图片地理位置信息
- Android开发之使用ExifInterface获取拍照后的图片属性
- 使用imageIO获取和修改图片的exif信息
- 读取图片信息(exif),使用com.drew.metadata.Metadata
- IOS: 使用imageIO获取和修改图片的exif信息
- jpg图片的Exif及gps信息和示例分析