前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 提取图片中的GPS信息

Python 提取图片中的GPS信息

作者头像
微软技术分享
发布2022-12-28 16:56:35
1.4K0
发布2022-12-28 16:56:35
举报
文章被收录于专栏:Python 编程技术实践

JPG图片中默认存在敏感数据,例如位置,相机类型等,可以使用Python脚本提取出来,加以利用,自己手动拍摄一张照片,然后就能解析出这些敏感数据了,对于渗透测试信息搜索有一定帮助,但有些相机默认会抹除这些参数。

提取图片EXIF参数: 通过提取指定图片的EXIF参数结合GPS数据定位到当时拍摄图片的物理位置.

代码语言:javascript
复制
import os,sys,json
import exifread
import urllib.request

#调用百度地图API通过经纬度获取位置
def getlocation(lat,lon):   
    url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=GPqF0q0uFT4zOmVKmPU7 \
    gu3SmB9z3jFV&output=json&coordtype=wgs84ll&location="+lat+","+lon
    req = urllib.request.urlopen(url)
    res = req.read().decode("utf-8")
    string = json.loads(res)
    jsonResult = string.get("result")
    formatted_address = jsonResult.get("formatted_address")
    print("目标所在城市: {}".format(formatted_address))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("[-] 请传递一个图片地址")
    else:
        ImageName = str(sys.argv[1])
        with open(ImageName,'rb') as f:
            tags = exifread.process_file(f)
            print("设备品牌: {}".format(tags['Image Make']))
            print("具体型号: {}".format(tags['Image Model']))
            print('照片尺寸: {} x {}'.format(tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength']))
            print("创建日期: {}".format(tags['Image DateTime']))
            print("拍摄时间: {}".format(tags["EXIF DateTimeOriginal"].printable))
            print("GPS处理方法: {}".format(tags['GPS GPSProcessingMethod']))
            print("GPSTimeStamp: {}".format(tags['GPS GPSTimeStamp']))
            print("拍摄软件版本: {}".format(tags['Image Software']))
            #纬度
            LatRef=tags["GPS GPSLatitudeRef"].printable
            Lat=tags["GPS GPSLatitude"].printable[1:-1].replace(" ","").replace("/",",").split(",")
            Lat=float(Lat[0])+float(Lat[1])/60+float(Lat[2])/float(Lat[3])/3600
            if LatRef != "N":
                Lat=Lat*(-1)
            #经度
            LonRef=tags["GPS GPSLongitudeRef"].printable
            Lon=tags["GPS GPSLongitude"].printable[1:-1].replace(" ","").replace("/",",").split(",")
            Lon=float(Lon[0])+float(Lon[1])/60+float(Lon[2])/float(Lon[3])/3600
            if LonRef!="E":
                Lon=Lon*(-1)
            f.close()
            print("目标所在经纬度: {},{}".format(Lat,Lon))
            getlocation(str(Lat),str(Lon))

将图片转为字符图片: 通过pillow图片处理库,对图片进行扫描,然后用特殊字符替换图片的每一个位,生成的字符图片.

代码语言:javascript
复制
from PIL import Image
import argparse

# 将256灰度平均映射到70个字符上
def get_char(r,g,b,alpha = 256):
    ascii_char = list("~!@#$%^&*()_+ ")
    if alpha == 0:
        return " "
    length = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit = (256.0 + 1)/length
    return ascii_char[int(gray/unit)]

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--file",dest="file",help="指定一个图片文件")
    parser.add_argument("--width",dest="width",type=int,default=50,help="指定图片宽度")
    parser.add_argument("--height",dest="height",type=int,default=25,help="指定图片高度")
    args = parser.parse_args()
    # 使用方式: pip install pillow | main.py --file=xxx.jpg
    if args.file != None:
        img = Image.open(args.file)
        img = img.resize((args.width,args.height), Image.NEAREST)
        txt = ""
        for row in range(args.height):
            for cow in range(args.width):
                txt += get_char(*img.getpixel((cow,row)))
            txt += "\n"
        print(txt)
    else:
        parser.print_help()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档