android实现将位置信息写入JPEG图片文件

通过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图片文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

时间: 2024-09-14 19:09:41

android实现将位置信息写入JPEG图片文件的相关文章

对Android GPS获取位置信息的新研究

最近在做一个 Android 项目,需要用到GPS获取位置信息,从 API 查了一下,发现获取位置信息仅需极其简单的一句即可: getLastKnownLocation(LocationManager.GPS_PROVIDER), 于是高兴地不得了.可是一写进代码里,返回值(Location 类型)居然一直为null..郁闷的不得了.在网上查了好久,发现好多人都和我一样纠结于这个问题上,有人说是因为GPS没打开,也有人说是相关权限没加上..可是我的明明已经在设置里打开,权限自然也加上了.在api

c# 如何遍历picturebox中所有动态添加的button,并将button信息写入到XML文件中

问题描述 我建了一个picturbox,上面设有7个按钮.点击任意一个按钮后,在picturebox上点击后会动态添加新的button现在想把picturebox上所有动态添加进来的所有button的坐标.大小等属性遍历出来,通过点击一个"保存"按钮写入到XML文件中,读写XML时可以还原每个动态添加的button的位置.代码应该如何写呢?我刚学不久,从网上找了很久也不知道如何写求大神帮帮忙 解决方案 本帖最后由 myj0926 于 2015-08-13 15:33:24 编辑解决方案

【MySQL】错误信息写入slave_relay_log.index 案例一则

第一次遇到MySQL 将错误信息写入 slave-relay-log.index 中,slave io thread 启动成功,而sql thread 失败的案例,记录下来. [现象] 生产环境突然报警,slave sql进程停止,登陆服务器检查,master-error.log 包含如下信息: #tail -f /home/mysql/data3008/mysql/master-error.log 140507 20:59:29 [ERROR] log 10:44:23 UTC - mysql

uri-Android中如何读入文件夹中的图片文件并得到该图片的名称

问题描述 Android中如何读入文件夹中的图片文件并得到该图片的名称 补充内容,我按照下面的方式读取了一张图片,能不能得到这个图片的名字?比如图片的名字为"XD0001.jpg",如何得到"XD0001"这个字符串? 我现在有一个程序,是从相册选择一张图片后裁剪,保存然后才能进入后面的处理,我现在想把裁剪功能去掉,并想实现读取文件夹中的所有图片,并能一张张的进行处理,我该怎么改? 现在的代码是: 这个是onActivityResult需要改的部分代码 protec

在Android Studio中使用BaiduMap SDK实时获取当地位置信息_Android

配置BaiduMap 环境 1.在百度API中新建自己的一个APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致: 2.百度地图中还需要填写一个SHA1 数字签名: a.输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),这个获取到的SHA1的值和ecplise中获取的值是一样的,是作为debug用的. b.输入keytool -list -v -ke

如何将jpeg图片组写入m-jpeg编码的avi

问题描述 如何将jpeg图片组写入m-jpeg编码的avi 我把avi的封装写好了,并在movi的chunk处插入了多帧jpeg图片组,但是出来的avi文件为什么只有1秒而且黑屏没有图像,郁闷 下面是我写入avi的字节数据,我在#后面插入的jpeg图片组, 0x52 0x49 0x46 0x46 0xff 0xff 0xff 0xff0x41 0x56 0x49 0x20 0x4c 0x49 0x53 0x540xff 0xff 0xff 0xff 0x68 0x64 0x72 0x6c0x61

如何改进jquery的mousemove处理程序,使得在鼠标移进图片时每秒钟最多记录5次位置信息?

问题描述 如何改进jquery的mousemove处理程序,使得在鼠标移进图片时每秒钟最多记录5次位置信息? $(document).on('mousemove', 'div.photo', function(event) { var $text='X: '+event.pageX+' || '+'Y: '+event.pageY; console.log($text.length) });

数据库数据恢复-读取iphone手机图片数据库,其中的图片位置信息是一段以bplist00开头的字符串

问题描述 读取iphone手机图片数据库,其中的图片位置信息是一段以bplist00开头的字符串 图片位置信息是一串以bplist00开头的字符串,其中包含了图片拍摄的中文位置信息,如何将里边的位置信息解析出来,有做过的大牛给个指点啊 解决方案 bplist是二进制的plist文件.像ipa中的Info.plist一样就是这种格式.用过一个python的解析库,叫biplist,它可以解析bplist格式,也不复杂可以参考下.

iOS版微信朋友圈识别图片位置信息 如何实现?_IOS

iOS版微信的一项功能:当你在朋友圈发照片的时候,就可以根据照片的拍摄地点显示地理位置.消息一出,网友们便纷纷开始尝试新功能的玩法. 在微信朋友圈上传图片时,点击位置可以自动识别照片拍摄的地理位置. 过去我们发送朋友圈时,可以显示自己所在的位置信息,而现在自动读取照片拍摄位置让不少人联想到了图像识别技术.事实上,微信所做的并没有这么复杂,有业内人士告诉雷锋网新功能是基于图片位置信息(即Exif的GPS定位信息)实现的. 什么是Exif? Exif(Exchangeable Image File)