精华内容
下载资源
问答
  • 如何获取照片的位置信息
    千次阅读 多人点赞
    2019-12-10 09:26:38

    目录

    1、背景

    2、云端部署

    3、照片分析


    1、背景

    每张图片都包含EXIF信息,它是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。总结来说EXIF信息包含着该照片的拍照基本信息。

    网上有很多的

    更多相关内容
  • Android 获取照片位置信息

    万次阅读 2017-12-18 14:38:46
    首先,需要读取手机本地的照片信息,可以借助ContentProvider读取本地媒体数据库来获得。 打开DDMS,在data/data/com.android.prividers.media/databases/external.db 将external.db导出到桌面查看,所有的媒体...

    首先,需要读取手机本地的照片信息,可以借助ContentProvider读取本地媒体数据库来获得。
    打开DDMS,在data/data/com.android.prividers.media/databases/external.db 将external.db导出到桌面查看,所有的媒体文件都存储在 files表中,打开如图:
    这里写图片描述

    由于我使用的是全新的模拟器,所以里边并没有媒体文件的信息。
    可以看到有很多字段。
    _data 媒体文件的存储路径
    _size 媒体文件大小
    date_added 媒体文件添加日期
    date_modified 媒体文件修改日期
    _display_name 媒体文件名称
    latitude 媒体文件的经度信息
    longitude 媒体文件的纬度信息
    title 媒体文件标题
    media_type 媒体文件类型 1代表图片 2代表录音 3代表视频
    duration 视频文件时长
    width 媒体文件宽
    height 媒体文件高

    下面我们就演示一下,用模拟器拍张照片。
    然后重新导出external.db 查看 files 表 :
    这里写图片描述
    这里写图片描述

    可以看到该照片的信息存储在了数据库中,但仔细查看 latitude 和 longitude 的值为null ,怎么回事呢?
    仔细想想,我们没有开启gps定位权限,怎么能获取到位置信息并存储呢。然后我们打开gps定位权限,并开启相机中保存位置按钮。我使用的是模拟器,如图:
    这里写图片描述

    然后重新拍照,导出external.db 查看 files 表,如下,可以看到latitude 和 longitude 中都有值了。这里写图片描述


    下面就读取该数据库文件的工作了,使用到了ContentProvider
    创建PhotoTest项目,代码如下:

    public class MainActivity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            findViewById(R.id.btn_get).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getPhotoLocation();
                }
            });
    
        }
        private static final String[] SELECTIMAGES = {
                MediaStore.Images.Media.DATA,
                MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.TITLE,
                MediaStore.Images.Media.DATE_ADDED,
                MediaStore.Images.Media.DATE_MODIFIED,
                MediaStore.Images.Media.LATITUDE,
                MediaStore.Images.Media.LONGITUDE,
                MediaStore.Images.Media.SIZE
        };
    
        private void getPhotoLocation() {
            ContentResolver contentResolver = getContentResolver();
            Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    SELECTIMAGES,
                    null,
                    null,
                    null);
            int i = 0;
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                    File file = new File(path);
                    if (!file.exists() || !file.canRead()) continue;
    
                    String name = cursor.getString(cursor.getColumnIndex( MediaStore.Images.Media.DISPLAY_NAME));
                    String title = cursor.getString(cursor.getColumnIndex( MediaStore.Images.Media.TITLE));
                    long addDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));
                    long modifyDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED));
                    float latitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));
                    float longitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Images.Media.LONGITUDE));
                    long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));
                    i++;
                     Log.d(TAG+i, "onCreate: "
                            +"path:-------"+path +"\n"
                            +"name:-------"+name +"            "
                            +"title:------"+title+"     "
                            +"addDate:----"+addDate+"\n"
                            +"modifyDate:-"+modifyDate+"\n"
                            +"latitude:---"+latitude+"    "
                            +"longitude:--"+longitude+"       "
                            +"size:-------"+size
                    );
                }
                cursor.close();
            }
        }
    
    }
    

    记得加权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    运行程序,点击按钮发现刚才所有的照片都读取到了
    

    这里写图片描述

    获取视频文件方法类似:

     private static final String[] SELECTVIDEOS = {
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.TITLE,
                MediaStore.Video.Media.DATE_ADDED,
                MediaStore.Video.Media.DATE_MODIFIED,
                MediaStore.Video.Media.LATITUDE,
                MediaStore.Video.Media.LONGITUDE,
                MediaStore.Video.Media.SIZE,
                MediaStore.Video.Media.DURATION
        };
      private void getVideoLocation() {
            ContentResolver contentResolver = getContentResolver();
            Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    SELECTVIDEOS,
                    null,
                    null,
                    null);
            int i = 0;
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
                    File file = new File(path);
                    if (!file.exists() || !file.canRead()) continue;
    
                    String name = cursor.getString(cursor.getColumnIndex( MediaStore.Video.Media.DISPLAY_NAME));
                    String title = cursor.getString(cursor.getColumnIndex( MediaStore.Video.Media.TITLE));
                    long addDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_ADDED));
                    long modifyDate = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED));
                    float latitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Video.Media.LATITUDE));
                    float longitude = cursor.getFloat(cursor.getColumnIndex(MediaStore.Video.Media.LONGITUDE));
                    long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));
                    //视频时长
                    long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));
                    i++;
                    Log.d(TAG+i, "onCreate: "
                            +"path:-------"+path +"\n"
                            +"name:-------"+name +"            "
                            +"title:------"+title+"     "
                            +"addDate:----"+addDate+"\n"
                            +"modifyDate:-"+modifyDate+"\n"
                            +"latitude:---"+latitude+"    "
                            +"longitude:--"+longitude+"       "
                            +"size:-------"+size+  "   "
                            +"duration:-------"+duration
                    );
                }
                cursor.close();
            }
        }
    文件添加日期 可以使用SimpleDateFormat转化。
    
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date(1513565779);
    String addTime = simpleDateFormat.format(date);
    展开全文
  • 主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 此处照片读取信息为WGS84坐标,但与BD09坐标相差不大,故未做坐标转换 python3 代码 import os import exifread import requests import shutil import logging ''' 获取图像的经纬度,弧度为单位 输入参数: ...

    环境

    此处照片读取信息为WGS84坐标,但与BD09坐标相差不大,故未做坐标转换

    python3

    代码

    import os
    import exifread
    import requests
    import shutil
    import logging
    
    '''
        获取图像的经纬度,弧度为单位
    
        输入参数:
        image_path:图像路径
    
        返回参数:
        (longtitude,latitude):经纬度元组
    '''
    def getImageLocation(image_path):
        longtitude,latitude=-1,-181
    
        with open(image_path,'rb') as image_read:
            tags = exifread.process_file(image_read)
            LON_FIELD,LAT_FIELD='GPS GPSLongitude','GPS GPSLatitude'
    
            if LON_FIELD in tags.keys():
                lon_val=tags[LON_FIELD].values
                longtitude=float(lon_val[0].num)+float(lon_val[1].num)/60+eval(str(lon_val[2]))/3600
    
            if LAT_FIELD in tags.keys():
                lat_val=tags[LAT_FIELD].values
                latitude=float(lat_val[0].num)+float(lat_val[1].num)/60+eval(str(lat_val[2]))/3600
    
        return longtitude,latitude
    
    '''
        根据经纬度判断当前所在城市
    
        输入参数:
        longitude:经度
        latitude:经度
    
        输出参数:
        province_name,city_name,district_name:当前经纬度所处省市区
    '''
    def getProvinceCityFromLocation(longitude,latitude):
        baidu_ak='百度地图AK'
        api_url='http://api.map.baidu.com/geocoder?location={},{}&output=json&key={}'.format(latitude,longitude,baidu_ak)
    
        response=eval(requests.get(api_url).text)
    
        status=response['status']
    
        if status=='OK':
            province_name=response['result']['addressComponent']['province']
            city_name=response['result']['addressComponent']['city']
            district_name=response['result']['addressComponent']['district']
    
            return province_name,city_name,district_name
        
        return None
    
    '''
        读取照片判断当前所在城市
    
        输入参数:
        longitude:经度
        latitude:经度
    
        输出参数:
        province_name,city_name,district_name:当前经纬度所处省市
    '''
    def getProvinceCityFromImage(image_path):
        is_correct_lon_lat=lambda lon,lat: True if 0<=lon<=180 and -90<=lat<=90 else False 
    
        lon,lat=getImageLocation(image_path)
        if is_correct_lon_lat(lon,lat):
            return getProvinceCityFromLocation(lon,lat)
    
        return None
    
    if __name__=='__main__':
        image_dir_path=r"照片文件夹"
        filters=['jpg','jpeg','png','bmp','tiff']
        dist_dir=os.path.join(os.path.dirname(image_dir_path),'dist')
    
        for image_name in os.listdir(image_dir_path):
            image_path=os.path.join(image_dir_path,image_name)
    
            if not os.path.exists(dist_dir):
                os.makedirs(dist_dir)
    
            if not os.path.isfile(image_path):
                continue
    
            if image_name.split('.')[-1] not in filters:
                continue
    
            try:
                province_name,city_name,district_name=getProvinceCityFromImage(image_path)
    
                dist_image_dir=os.path.join(dist_dir,province_name,city_name)
    
                if not os.path.exists(dist_image_dir):
                    os.makedirs(dist_image_dir)
    
                shutil.move(image_path,dist_image_dir)
                logging.info('正在将文件'+image_path+'移动至'+dist_image_dir)
            except Exception as identifier:
                shutil.move(image_path,dist_dir)
                logging.info('未找到城市信息,正在将文件'+image_path+'移动至'+dist_image_dir)
                continue
    
        logging.info('分类完成!')
    

    效果

    在这里插入图片描述在这里插入图片描述

    展开全文
  • 照片位置坐标提取.zip

    2020-09-20 09:48:34
    利用C++开发,提取照片信息提取程序 ,如拍照位置
  • java对照片进行定位 获取拍摄时间、拍摄地点、拍摄手机型号、像素比例、gps信息、海拔等等完整项目
  • 主要介绍了IOS 照片操作及获取拍照信息和修改信息的相关资料,这里主要介绍,获取系统照片信息,及地理位置和时间的修改,需要的朋友可以参考下
  • 拍照前,如果相机开启了位置信息权限,便会在其 Exif 元数据中记录位置信息,由于此位置信息属于敏感信息,如果我们的应用使用了分区存储,系统会对应用隐藏这些位置信息,那么我们需要获取相关信息要怎么办呢?...

            拍照前,如果相机开启了位置信息权限,便会在其 Exif 元数据中记录位置信息,由于此位置信息属于敏感信息,如果我们的应用使用了分区存储,系统会对应用隐藏这些位置信息,那么我们需要获取相关信息要怎么办呢?

    1.targetSdkVersion=29时,在application中添加android:requestLegacyExternalStorage="true"即可

    2.targetSdkVersion>29时,系统会忽略 android:requestLegacyExternalStorage标记,需要在清单文件中添加 ACCESS_MEDIA_LOCATION 权限

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                float[] latLong= new float[2];
    
                // 需 ACCESS_MEDIA_LOCATION 权限     
                Uri photoUri = MediaStore.setRequireOriginal(uri);
                InputStream stream = null;
                try {
                    stream = getContentResolver().openInputStream(photoUri);
                    if (stream != null) {
    
                        ExifInterface exifInterface = new ExifInterface(stream);
    
                        //获取经纬度信息,第一个元素为纬度,第二个元素为经度
                        exifInterface.getLatLong(latLong);
    
                        stream.close();
                    } 
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

    展开全文
  • 从数码照片中读取定位信息

    千次阅读 2021-08-26 10:25:41
    本文介绍如何读取数码照片中的位置信息,以及根据位置信息转换成shapefile格式点数据。 1、目标 数码照片在拍摄时会产生一个Exif数据(Exchangeable image file format),该数据记录了照片的拍摄信息,并附加于...
  • 照片位置信息提取(获取经纬度)

    千次阅读 2021-07-23 15:47:34
    import exifread import json import urllib.request import exifread import json import urllib.request f = open(r'C:\Users\Pictures\Camera Roll\7615a...#打印照片其中一些信息 print('拍摄时间:', tags
  • 开启位置信息拍照的图片,会在图片的头部保存相关位置信息。保存的位置信息可能是按照 118°22′22″ 度分秒的方式,需要
  • 然后通过经纬度信息找到具体的地理位置信息。 安装可以读取经纬度信息的python非标准库exifread pip install exifread 将该模块导入到当前代码块中。 import exifread as ex 编写照片信息读取函数,获取照片中的...
  • 编写的python源程序,用于读出图片中的地理位置信息,即照片在哪拍的拍摄的就会存储拍摄地点的坐标信息
  • android图库照片获取地理位置方法

    千次阅读 2021-09-30 10:07:03
    android 手机获取照片(原图)中时间,地点等信息方法介绍,同时也提醒大家注意信息保护
  • 读取照片流的地理位置,读出的是经度和纬度,再用定位SDK转换即可。
  • 通过一张日常照片,从中获取关键信息。 例: 这是一张消费者在进食的图片。 首先,我们可以从品牌发现,消费者是在一家麦当劳里。 其次,我们可以从盘子的小部分报纸上看出这则新闻是跟马来西亚有关的。 第三,我们...
  • Java解析照片获取地理位置GPS信息(附源码,亲测)

    万次阅读 多人点赞 2019-09-03 11:36:32
    给我一张照片,立刻拿到它的GPS数据!不信请看!
  • 通过一张照片来进行GPS定位,java实现起来就这么简单
  • 怀疑对象出轨怎么办,只需一张图片,JAVA程序猿帮你搞定
  • 照片GPS位置信息提取

    千次阅读 2020-12-24 13:50:13
    日常基站勘查和投诉处理过程中需要拍照,采集无线环境等相关信息,通常都需要记录经纬度信息,这些单个的照片信息对于我们来说只是一个单独的点,日积月累后的这种空间信息对从事网优的人就是一种资源,规划和处理...
  • 有媒体曝出,微信发原图或存在泄露位置信息的风险。 对此,腾讯微信团队微博12月1日发布声明称,朋友圈发送的照片都经过系统自动压缩,不带位置等信息,实在担心的话,可以P完图再发,如下图: 微信团队提到过...
  • Python+获取照片中的GPS信息

    千次阅读 2022-02-28 11:43:32
    获取照片中的EXIF元数据信息,包括GPS经纬度信息(转换成十进制显示)
  • 采用 iOS 偏底层的ImageIO,获取照片信息(照片地理位置,拍照时间,拍照机型,机型品牌,机型操作系统,曝光光圈,照片大小,照片种类,照片色彩种类等等)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,827
精华内容 15,530
关键字:

如何获取照片的位置信息