精华内容
下载资源
问答
  • 调戏微信定位算法的灵感来源于一次发带GPS信息图片的朋友圈。发现微信的定位逻辑是:如果定位之前先选择了带有GPS信息的照片,那么定位信息是先从照片引用的,如果发现没信息再从GPS或基站定位。   首先看看效果: ...

    2017年1月22日更新

    2016-12-28,网友反馈定位失效。发现微信团队已经把算法给改了——朋友圈定位信息不再优先引用图片带的GPS信息。这就意味着本教程失效了。(偷笑)不知道是否有我一份“功劳”在里面。感谢您的来访,欢迎您关注“叶子竹”的微信公众号。

    -------------------------------------------------------


    调戏微信定位算法的灵感来源于一次发带GPS信息图片的朋友圈。发现微信的定位逻辑是:如果定位之前先选择了带有GPS信息的照片,那么定位信息是先从照片引用的,如果发现没信息再从GPS或基站定位。

     

    首先看看效果:

     

    定位信息显示“吉尔吉斯斯坦”。可是叶子竹还在学校用功读书呢。这是怎么回事?来看看叶子竹是怎么做到的吧!

     

    下面简单做一下示范:

    首先是发不带GPS信息的图片,我们看看效果。

     


     

     

    可以看到,无论我们想怎么更改我们的定位地址,定位信息只局限于定位者所在城市。

     

    接下来,根据搜到的纽约经纬度,我们用电脑修改一下图片的GPS信息,再将原图传回到手机。注意此时最好使用手机助手等发送“原图文件”,因为通过微信或QQ等发送的图片一般会经过压缩,导致我们需要的GPS信息丢失。

     


     


     


    然后我们把刚才的原图选到朋友圈,再选择“所在位置”定位,看看你现在在哪里吧。:-D

     



     


    看吧,现在我们的定位信息已经变到“纽约”了。:-D

     

    简单做一下评价,个人感觉微信团队设计的朋友圈定位算法还是比较好的,特别是在你旅行时不想分心发朋友圈或者担心出国旅行流量费钱又不想错过当时的定位信息的时候。这一点应该为微信团队的精心设计点个赞。同时,我们也不应该过于迷信定位信息。有一次我竟异想天开想到犯罪者可能利用定位信息来做不在场证明,呵,有点幼稚了。搜了一下,目前还没有发现网上有人用我这个方法更改微信定位信息的,所以写下这篇文章分享分享。不排除微信团队会在后期更改定位逻辑而使本文的教程失效。另外,QQ空间的定位是不引用图片信息的,但可以利用微信的QQ空间同步功能进行相应的位置同步。:)

     

     

    本文为“叶子竹”原创作品,转载请注明“叶子竹”及本文所在链接,谢谢!

     

    为了能使自己专注于创作本身,减少因为在社交网重复发布信息而导致的时间精力浪费。现除了微信公众平台,叶子竹的思考类文章只发布在新浪博客,IT类文章只发布在CSDN博客,微博类消息只发布在新浪微博,书影评类文章只发布在豆瓣,其它社交网站只分享其链接。感谢支持。


     

    叶子竹的微信公众号

    展开全文
  • 根据选择的本地图片的exif信息,读取到地理位置的经纬度,然后使用高德地图反地理编码解析出地理位置名称,如果图片中没有包含或者无法包含经纬度信息,那么就在用户发起拍照请求时通过高德定位SDK拿到相关信息。...

    效果图:
    这里写图片描述

    一、了解Exif

    EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,是一种图像文件格式,它的数据存储与JPEG格式是完全相同的,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。
    Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看 Exif 文件,但图像一旦被修改,Exif 信息可能会永久丢失,故编辑 Exif 必须使用专门的软件。
    目前能够正确读取并识别的厂商注释等信息的Exif 查看/编辑软件比较少:主要有ExifTool、MagicEXIF等。

    二、学习ExifInterface

    Android2.0后新增的一个类
    相关Tag:
    TAG_DATETIME时间日期
      TAG_FLASH闪光灯
      TAG_GPS_LATITUDE纬度
      TAG_GPS_LATITUDE_REF纬度参考
      TAG_GPS_LONGITUDE经度
      TAG_GPS_LONGITUDE_REF经度参考
      TAG_IMAGE_LENGTH图片长
      TAG_IMAGE_WIDTH图片宽
      TAG_MAKE设备制造商
      TAG_MODEL设备型号
      TAG_ORIENTATION方向
      TAG_WHITE_BALANCE白平衡

    /**
     * This is a class for reading and writing Exif tags in a JPEG file.
     */

    Exifinterface

    三、简单应用

    根据选择的本地图片的exif信息,读取到地理位置的经纬度,然后使用高德地图反地理编码解析出地理位置名称,如果图片中没有包含或者无法包含经纬度信息,那么就在用户发起拍照请求时通过高德定位SDK拿到相关信息。以前没注意到有这么个类,先记录下,待会抽空来完善优化下流程和代码。

    定位(获取当前位置)有两种方法:
    1、通过LocationManager,其实就是通过GPS获取

    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    但是这样貌似不行,可能由于google被墙或者这个方法的权限问题,导致这个location为null

    2、通过高德地图定位SDK的AMapLocationClient

        //声明定位回调监听器
        public AMapLocationListener mLocationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation amapLocation) {
                if (amapLocation != null) {
                    if (amapLocation.getErrorCode() == 0) {
                        //定位成功回调信息,设置相关消息
                        amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        currentLat = amapLocation.getLatitude();//获取纬度
                        currentLon = amapLocation.getLongitude();//获取经度
                    }
                }
            }
        };

    初始化定位、设置定位监听器后并启动定位mLocationClient.startLocation()后确实可以拿到当前经纬度,但在我的demo里,试了下太耗时(还没深原因),但是如果在一个完整的项目里,可以这样做。

    public LatLng getPhotoLocation(String imagePath) {
            LogUtil.i("TAG", "getPhotoLocation==" + imagePath);
            LatLng latLng = null;
    
            try {
                ExifInterface exifInterface = new ExifInterface(imagePath);
                String datetime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);// 拍摄时间
                String deviceName = exifInterface.getAttribute(ExifInterface.TAG_MAKE);// 设备品牌
                String deviceModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL); // 设备型号
                String latValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
                String lngValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
                String latRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
                String lngRef = exifInterface.getAttribute
                        (ExifInterface.TAG_GPS_LONGITUDE_REF);
                if (latValue != null && latRef != null && lngValue != null && lngRef != null) {
                    try {
                        output1 = convertRationalLatLonToFloat(latValue, latRef);
                        output2 = convertRationalLatLonToFloat(lngValue, lngRef);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                }
    
                Toast.makeText(TestActivity.this, deviceName + ":" + deviceModel, Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            Toast.makeText(TestActivity.this, output1 + ";" + output1 , Toast.LENGTH_LONG).show();
    
            latLng = new LatLng(output1 , output1 );
            return latLng;
        }
    
        private static float convertRationalLatLonToFloat(
                String rationalString, String ref) {
    
            String[] parts = rationalString.split(",");
    
            String[] pair;
            pair = parts[0].split("/");
            double degrees = Double.parseDouble(pair[0].trim())
                    / Double.parseDouble(pair[1].trim());
    
            pair = parts[1].split("/");
            double minutes = Double.parseDouble(pair[0].trim())
                    / Double.parseDouble(pair[1].trim());
    
            pair = parts[2].split("/");
            double seconds = Double.parseDouble(pair[0].trim())
                    / Double.parseDouble(pair[1].trim());
    
            double result = degrees + (minutes / 60.0) + (seconds / 3600.0);
            if ((ref.equals("S") || ref.equals("W"))) {
                return (float) -result;
            }
            return (float) result;
        }

    这里写图片描述

    四、总结

    经过简单测试了魅蓝note2、努比亚、华为P6三款机型,得出结论:
    1、在拍照的照片识别中,只有努比亚不可以读取图片的经纬度信息,但是可以读取机型等信息。
    2、在选取本地图库的照片(由本机相机拍照所得)识别中,同上。
    3、在选取本地图库的图片(由非本机相机所得,比如网络下载、裁剪等渠道而来)识别中,都无法读取相关信息。
    4、以上3条可以总结为1条,只能识别那些带有exif信息的图片

    五、样例下载

    1、下载地址点这里,代码很少,仅供参考。
    csdn的代码下载下来可能不一定能跑起来,为此今天(2018-02-05)我简单更新了代码托管在了github上,地址在这里:https://github.com/xmliu/xmPhoto
    2、声明:demo是一个android module,可以直接复制到现有的project下;测试时记得开启手机的GPS权限。
    3、要修改的地方:打包签名的keystore需要换成自己的;高德地图key需要自己根据keystore重新申请。

    展开全文
  • 事实上,微信所做的并没有这么复杂,有业内人士告诉新功能是基于图片位置信息(即Exif的GPS定位信息)实现的。 什么是Exif? Exif(Exchangeable Image File)是一种图像文件格式,它最早是由日

    在微信朋友圈上传图片时,点击位置可以自动识别照片拍摄的地理位置

    过去我们发送朋友圈时,可以显示自己所在的位置信息,而现在自动读取照片拍摄位置让不少人联想到了图像识别技术。事实上,微信所做的并没有这么复杂,有业内人士告诉新功能是基于图片位置信息(即Exif的GPS定位信息)实现的。

    微信朋友圈识别图片位置信息,原来是这么实现的

    什么是Exif?

    Exif(Exchangeable Image File)是一种图像文件格式,它最早是由日本电子和信息技术协会(JEITA)为相机相机厂商制定一套标准。

    现在,任何一部手机拍出的照片都有一组Exif参数,Exif除了有像素信息之外,还包含了光圈、快门、白平衡、ISO、焦距、日期时间等各种图像信息以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据。

    理论上,只要不经过特殊处理,每张图片的Exif信息会一直保留。

    微信做了什么?

    微信这次的新功能很有可能就是调用了Exif中的GPS全球定位系统数据,这些数据都来自于手机内部的传感器以及陀螺仪。

    雷锋网在某Exif查看器上对手机拍摄的照片进行了试验,结果显示只要图片未被压缩,日期时间、拍照设备型号、像素以及光圈快门等信息都能记录下来,而位置信息则需要用户打开GPS才能展现出来。

    微信朋友圈识别图片位置信息,原来是这么实现的

    微信朋友圈识别图片位置信息,原来是这么实现的

    如上图所示,Exif涵盖的位置信息有经度、纬度以及海拔,而这组数据对应的刚好就是小编拍摄照片时的位置。可以确定的是,微信的新功能就解析了这组数据。

    微信朋友圈识别图片位置信息,原来是这么实现的

    看到这里你应该就知道微信是如何精准识别用户上传图片的拍摄位置了,是不是比大家想象的要简单呢?

    展开全文
  • Linux系统中查看图片信息

    千次阅读 2016-10-11 20:43:30
    管理员权限下在根目录安装imagemagick,即:# apt-...用identify命令查看图片信息,即identify image_0001.jpg,会显示如下信息: image_0001.jpg JPEG 256x256 256x256+0+0 8-bit DirectClass 19.6KB 0.000u 0:00.000
    1. 管理员权限下在根目录安装imagemagick,即:# apt-get install imagemagick
    2. 用identify命令查看图片信息,即identify image_0001.jpg,会显示如下信息:
    image_0001.jpg JPEG 256x256 256x256+0+0 8-bit DirectClass 19.6KB 0.000u 0:00.000
    展开全文
  • 因为iphone拍照的照片都会带有地理位置信息,我们先来实现怎么读取里面的安全信息,然后再来分析 #import "ViewController.h" #import #import @interface ViewController () @end @implementation ...
  • 图片EXIF
  • Python解析照片EXIF信息,获取坐标位置

    千次阅读 多人点赞 2019-12-10 09:26:38
    每张图片都包含EXIF信息,它是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引...
  • 查看网络图片的地址

    千次阅读 2017-11-23 13:33:38
    鼠标右键一般都会弹出几个选择,直接选择复制,有些是不同的可以选择选择复制图像地址(o) 这样就复制到...有些是有查看图片信息的,这个和点进去图片的界面有关系, 图片信息如下图 ,下面的位置就是图片的地址。
  • 高仿腾讯 QQ,已经实现了纯文本,表情,图片,语音,位置信息的发送。
  • 这是一个三个月前的项目需求,需要识别多张图片上固定位置信息并提取。说到python 上文字识别,可能有些人想用 pytesseract 来做,怎么说呢,识别精准度相对较低,而且对于数量较大的图片来说,不可能再去人工的去...
  • [图片说明](https://img-ask.csdn.net/upload/201710/18/1508296287_562778.png)IDEA启动Java项目报错,控制台有报错信息,但是没有定位到报错代码的位置,所以我无法确定哪里的代码有问题。问下各位大神,除了在...
  • 图片头文件信息解析

    万次阅读 2016-01-12 13:25:39
    图片的文件头部存储有该图片相关信息,可以从中读取相应字段,得到尺寸、大小、格式等信息。由于无需载入整张图片,故而速度较快。当图片较大时,优势更加明显。  现在把今天发现的东西总结一下,所有数据都是用的...
  • Android 获取照片位置信息

    千次阅读 2017-12-18 14:38:46
    首先,需要读取手机本地的照片信息,可以借助ContentProvider读取本地媒体数据库来获得。 打开DDMS,在data/data/com.android.prividers.media/databases/external.db 将external.db导出到桌面查看,所有的媒体...
  • poi直接插入图片是插入内嵌图片 这个图片是占位置的。 会撑高当前的那一行类似效果 行使得制作出来的word样式辣眼睛。  一般印章签名效果要求的是 1.在指定位置插入 2.不影响原有模板内容 解决方案:  1.图片...
  • Android 获取手机本地图片所在的位置

    千次阅读 2016-05-13 10:32:36
    Android、道友们在做需求的时候、可能会需要展示图片的拍摄位置坐标
  • 通过图片获取地理位置

    千次阅读 2020-07-31 16:02:38
    项目的基础上添加了一些代码,为了直接可以查看地图更加直观。 使用了高德静态地图的API。 注册方法 打开高德开发平台:高德地图开发平台 注册账号,打开控制台 应用管理–>我的应用–>添加新应用 一定要选择...
  • 修改图片exif信息

    千次阅读 2014-10-29 12:59:00
    EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。 所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。文件头中有一系列“0...
  • 如何通过图片获取对方位置

    千次阅读 2020-05-15 11:01:25
    首先向大家介绍一下如何通过对方发送的图片获取地理位置,实际方法非常简单,仅需阅读2分钟,你就可以轻松在家人、朋友面前show一下技术手腕~~~ 步骤一:获取图片原图; 这是我们获取定位的首要条件,图片原图 途径...
  • 读取图片中的定位信息(实测)

    千次阅读 2018-11-27 19:45:49
    package com.drew.metadata; import java.io.File; import com.drew.imaging.ImageMetadataReader; import ... /** * java读取照片信息 */ public class SampleUsage{...
  • 通过图片获取gps地理位置

    万次阅读 多人点赞 2018-10-05 20:53:00
    别人说通过一张照片就可以定位你的位置,看来个视频,仔细研究了一下自己的照片没想到真的可以做到,想想真的有点可怕。 如何通过一张照片去定位这张照片的经纬度下面我以我手机中的照片为例。 我们通过python3 ...
  • Python 技术篇-获取图片GPS信息,锁定追踪图片拍摄地点、拍摄时间。 我们需要 exifread 库,这个就是用来提取 GPS 信息的。直接 pip install exifread 来安装就好了。 我用前段时间朋友在三亚拍的这个骆驼照片来做个...
  • 这是一上完全通过Duilib来实现的一个图片查看器,仿照QQ图片查看器的效果实现,希望大家喜欢。 先看一下使用的截图吧: 一:使用说明 1. 通过命令行调用,传递图片路径即可打开图片查看器,支持绝对路径与相对...
  • 用百度SDK获取地理位置和天气信息

    千次阅读 2015-06-10 18:26:02
    下面实现通过百度SDK获取地理位置和天气信息,请参考百度开发文档 1. 下载并导入相关的库文件 2. 设置AndroidManifest.xml 在application标签中声明service组件,每个app拥有自己单独的定位service service ...
  • Kali exiftool图片信息工具

    千次阅读 2019-09-30 13:03:12
    一、什么是EXIF 可交换图像文件格式常...Exif 可以被附加在 JPEG、TIFF、RIFF 等文件之中,为其增加有关数码相机拍摄信息的内容和缩略图或图像处理软件的一些版本信息 二、exiftool简介 官网:https://sno.phy.qu...
  • 微信获取用户地理位置信息 微信jsapi
  • 如何在照片中查找地理位置信息

    千次阅读 2019-04-19 12:24:12
    如何在照片中查找地理位置信息
  • Java将图片插入到word指定位置

    千次阅读 2019-01-02 18:05:33
    有时我们想在一篇word文档中的指定位置添加一张图片,并且这张图片来自于后台服务器。这个对文档的操作一定是需要第三方api的。市面上对文档处理的插件有POI以及openoffice等等,学习成本很大,关键是通过这些插件对...
  • 你与陌生人之间,可能只是一张照片的距离。有时候一张 “原图”照片,分分钟就暴露了你的信息……
  • 参考:图片EXIF信息查看与Exiftool使用参考:如何批量将图片文件名中的时间写入 EXIF 信息? 知乎 安装: # Mac上安装 $ brew install exiftool # 或Linux上安装 $ sudo apt-get install exiftool...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,778
精华内容 70,311
关键字:

查看图片位置信息