android实现将位置信息写入JPEG图片文件
2017-03-10 10:34
453 查看
通过ExifInterface可以将拍照时的一些属性信息写入图片文件里,其中包括经纬度信息。本文介绍一种将经纬度坐标写入JPEG图片文件的方法!
核心代码
/** * 浮点型经纬度值转成度分秒格式 * * @param coord * @return */ public String decimalToDMS(double coord) { String output, degrees, minutes, seconds; // gets the modulus the coordinate divided by one (MOD1). // in other words gets all the numbers after the decimal point. // e.g. mod := -79.982195 % 1 == 0.982195 // // next get the integer part of the coord. On other words the whole // number part. // e.g. intPart := -79 double mod = coord % 1; int intPart = (int) coord; // set degrees to the value of intPart // e.g. degrees := "-79" degrees = String.valueOf(intPart); // next times the MOD1 of degrees by 60 so we can find the integer part // for minutes. // get the MOD1 of the new coord to find the numbers after the decimal // point. // e.g. coord := 0.982195 * 60 == 58.9317 // mod := 58.9317 % 1 == 0.9317 // // next get the value of the integer part of the coord. // e.g. intPart := 58 coord = mod * 60; mod = coord % 1; intPart = (int) coord; if (intPart < 0) { // Convert number to positive if it's negative. intPart *= -1; } // set minutes to the value of intPart. // e.g. minutes = "58" minutes = String.valueOf(intPart); // do the same again for minutes // e.g. coord := 0.9317 * 60 == 55.902 // e.g. intPart := 55 coord = mod * 60; intPart = (int) coord; if (intPart < 0) { // Convert number to positive if it's negative. intPart *= -1; } // set seconds to the value of intPart. // e.g. seconds = "55" seconds = String.valueOf(intPart); // I used this format for android but you can change it // to return in whatever format you like // e.g. output = "-79/1,58/1,56/1" output = degrees + "/1," + minutes + "/1," + seconds + "/1"; // Standard output of D°M′S″ // output = degrees + "°" + minutes + "'" + seconds + "\""; return output; } /** * 将经纬度信息写入JPEG图片文件里 * * @param picPath * JPEG图片文件路径 * @param dLat * 纬度 * @param dLon * 经度 */ public void writeLatLonIntoJpeg(String picPath, double dLat, double dLon) { File file = new File(picPath); if (file.exists()) { try { ExifInterface exif = new ExifInterface(picPath); String tagLat = exif .getAttribute(ExifInterface.TAG_GPS_LATITUDE); String tagLon = exif .getAttribute(ExifInterface.TAG_GPS_LONGITUDE); if (tagLat == null && tagLon == null) // 无经纬度信息 { exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, decimalToDMS(dLat)); exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, dLat > 0 ? "N" : "S"); // 区分南北半球 exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, decimalToDMS(dLon)); exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, dLon > 0 ? "E" : "W"); // 区分东经西经 exif.saveAttributes(); } } catch (Exception e) { } } }
测试代码
String strImgPath = getImageCachePath() + File.separator + "1.jpg"; ExifInterface eif = new ExifInterface(strImgPath); String lat = eif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); String latRef = eif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); String lon = eif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); String lonRef = eif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); System.out.println("Latitude Ref - " + latRef); System.out.println("Latitude - " + lat); System.out.println("Longitude Ref - " + lonRef); System.out.println("Longitude - " + lon); if (lat == null && lon == null) // 没有位置信息才写入 { writeLatLonIntoJpeg(strImgPath, 39.23456, 116.123456); }
第一次运行结果
05-22 17:36:24.566: I/System.out(17966): Latitude Ref - null 05-22 17:36:24.566: I/System.out(17966): Latitude - null 05-22 17:36:24.566: I/System.out(17966): Longitude Ref - null 05-22 17:36:24.566: I/System.out(17966): Longitude - null
原始图片没有位置信息,通过调用writeLatLonIntoJpeg(strImgPath, 39.23456, 116.123456)来模拟写入一个位置。
第二次运行结果
05-22 17:37:11.446: I/System.out(17966): Latitude Ref - N 05-22 17:37:11.446: I/System.out(17966): Latitude - 39/1,14/1,4/1 05-22 17:37:11.446: I/System.out(17966): Longitude Ref - E 05-22 17:37:11.446: I/System.out(17966): Longitude - 116/1,7/1,24/1
以上这篇android实现将位置信息写入JPEG图片文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- 如何将位置信息写入JPEG图片文件【android】
- Android2.2下camera应用程序支持GPS信息写入jpeg文件
- canny算法的实现(android加载图片,数组写入文件换行)
- Android2.2下camera应用程序支持GPS信息写入jpeg文件
- Android 2.2 下 camera 应用程序支持 GPS 信息写入 jpeg 文件
- Android2.2下camera应用程序支持GPS信息写入jpeg文件
- Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- 给图片文件写入exif信息(ios)
- Installshield x:实现序列号检验,获取用户信息并写入指定_ini文件1 - 子夜 MySpace聚友博客
- Installshield x:实现序列号检验,获取用户信息并写入指定_ini文件1 - 子夜 MySpace聚友博客
- Android下图片或按钮等可拖动到任意位置的效果实现源码
- android 定位位置后怎么实现在在标记上显示信息窗口?
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用 ...
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- Struts2+Android (2) 实现信息,文件上传功能
- Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏