python 读取照片上的经纬度信息

2021/12/16 22:13:49

本文主要是介绍python 读取照片上的经纬度信息,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  读取照片信息,以及根据经纬度通过百度地图API获取位置

  import exifread

  import json

  import urllib.request

  Open image file for reading (binary mode)

  f=open(‘001.jpg’, ‘rb’)

  Return Exif tags

  tags=exifreadcess_file(f)

  ‘’’

  #打印所有照片信息

  for tag in tags.keys():

  print(“Key: {}, value {}”.format(tag, tags[tag]))

  ‘’’

  #打印照片其中一些信息

  print(‘拍摄时间:’, tags[‘EXIF DateTimeOriginal’])

  print(‘照相机制造商:’, tags[‘Image Make’])

  print(‘照相机型号:’, tags[‘Image Model’])

  print(‘照片尺寸:’, tags[‘EXIF ExifImageWidth’], tags[‘EXIF ExifImageLength’])

  #获取经度或纬度

  def getLatOrLng(refKey, tudeKey):

  if refKey not in tags:

  return None

  ref=tags[refKey].printable

  LatOrLng=tags[tudeKey].printable[1:-1].replace(" “,”").replace("/",",").split(",")

  LatOrLng=float(LatOrLng[0])+float(LatOrLng[1])/60+float(LatOrLng[2])/float(LatOrLng[3])/3600

  if refKey==‘GPS GPSLatitudeRef’ and tags[refKey].printable !=“N”:

  LatOrLng=LatOrLng*(-1)

  if refKey==‘GPS GPSLongitudeRef’ and tags[refKey].printable !=“E”:

  LatOrLng=LatOrLng*(-1)

  return LatOrLng

  #调用百度地图API通过经纬度获取位置

  def getlocation(lat,lng):

  url=‘

  api.map.baidu/geocoder/v2/?location=’ + lat + ‘,’ + lng + ‘&output=json&pois=1&ak=申请的百度地图KEY’

  req=urllib.request.urlopen(url)

  res=req.read().decode(“utf-8”)

  str=json.loads(res)

  #print(str)

  jsonResult=str.get(‘result’)

  formatted_address=jsonResult.get(‘formatted_address’)

  return formatted_address

  lat=getLatOrLng(‘GPS GPSLatitudeRef’,‘GPS GPSLatitude’) #纬度

  lng=getLatOrLng(‘GPS GPSLongitudeRef’,‘GPS GPSLongitude’) #经度

  print(‘纬度:{} 经度:{}’.format(lat, lng))

  location=getlocation(str(lat), str(lng))

  print(‘位置:{}’.format(location))

  读取的图片信息大致包含以下内容:

  {'Image ImageWidth': (0x0100) Short=4032 @ 18,

  'Image Model': (0x0110) ASCII=****@ 158,

  'Image ImageLength': (0x0101) Short=3024 @ 42,

  'Image Orientation': (0x0112) Short=Horizontal (normal) @ 54,

  'Image DateTime': (0x0132) ASCII=2021:12:07 03:10:34 @ 166,

  'Image YCbCrPositioning': (0x0213) Short=Centered @ 78,

  'Image ExifOffset': (0x8769) Long=209 @ 90,

  'Image ResolutionUnit': (0x0128) Short=Pixels/Inch @ 102,

  'Image GPSInfo': (0x8825) Long=792 @ 114,

  'Image XResolution': (0x011A) Ratio=72 @ 186,

  'Image YResolution': (0x011B) Ratio=72 @ 194,

  'Image Make': (0x010F) ASCII=Xiaomi @ 202,

  'Thumbnail JPEGInterchangeFormat': (0x0201) Long=928 @ 808,

  'Thumbnail Orientation': (0x0112) Short=Horizontal (normal) @ 820,

  'Thumbnail JPEGInterchangeFormatLength': (0x0202) Long=8039 @ 832,

  'Thumbnail Compression': (0x0103) Short=JPEG (old-style) @ 844,

  'Thumbnail ResolutionUnit': (0x0128) Short=Pixels/Inch @ 856,

  'Thumbnail XResolution': (0x011A) Ratio=72 @ 912,

  'Thumbnail YResolution': (0x011B) Ratio=72 @ 920,

  'Thumbnail ExifImageLength': (0xA003) Long=240 @ 892,

  'Thumbnail ExifImageWidth': (0xA002) Long=320 @ 904,

  'EXIF ISOSpeedRatings': (0x8827) Long=372 @ 219,

  'EXIF ExposureProgram': (0x8822) Short=Program Normal @ 231,

  'EXIF FNumber': (0x829D) Ratio=19/10 @ 599, 'EXIF ExposureTime': (0x829A) Ratio=1/50 @ 607,

  'EXIF Tag 0x9999': (0x9999) ASCII={"sensor_type":"rear","mirror":false} @ 615,

  'EXIF SensingMethod': (0xA217) Short=Not defined @ 279,

  'EXIF SubSecTimeDigitized': (0x9292) ASCII=183622 @ 653,

  'EXIF SubSecTimeOriginal': (0x9291) ASCII=183622 @ 660,

  'EXIF SubSecTime': (0x9290) ASCII=183622 @ 667,

  'EXIF FocalLength': (0x920A) Ratio=197/50 @ 674,

  'EXIF Flash': (0x9209) Short=Flash did not fire, compulsory flash mode @ 339,

  'EXIF LightSource': (0x9208) Short=Unknown @ 351,

  'EXIF MeteringMode': (0x9207) Short=CenterWeightedAverage @ 363,

  'EXIF SceneCaptureType': (0xA406) Short=Standard @ 375,

  'Interoperability InteroperabilityIndex': (0x0001) ASCII=R98 @ 772,

  'Interoperability InteroperabilityVersion': (0x0002) Undefined=[48, 49, 48, 48] @ 784,

  'EXIF InteroperabilityOffset': (0xA005) Long=762 @ 387,

  'EXIF FocalLengthIn35mmFilm': (0xA405) Short=20 @ 399,

  'EXIF MaxApertureValue': (0x9205) Ratio=37/20 @ 682,

  'EXIF DateTimeDigitized': (0x9004) ASCII=2021:12:07 03:10:34 @ 690,

  'EXIF ExposureBiasValue': (0x9204) Signed Ratio=0 @ 710,

  'EXIF ExifImageLength': (0xA003) Long=3024 @ 447,

  'EXIF WhiteBalance': (0xA403) Short=Auto @ 459,

  'EXIF DateTimeOriginal': (0x9003) ASCII=2021:12:07 03:10:34 @ 718,

  'EXIF BrightnessValue': (0x9203) Signed Ratio=-79/50 @ 738,

  'EXIF ExifImageWidth': (0xA002) Long=4032 @ 495,

  'EXIF ExposureMode': (0xA402) Short=Auto Exposure @ 507,

  'EXIF ApertureValue': (0x9202) Ratio=37/20 @ 746,

  'EXIF ComponentsConfiguration': (0x9101) Undefined=YCbCr @ 531,

  'EXIF ColorSpace': (0xA001) Short=sRGB @ 543,

  'EXIF SceneType': (0xA301) Byte=Directly Photographed @ 555,

  'EXIF ShutterSpeedValue': (0x9201) Signed Ratio=5643/1000 @ 754,

  'EXIF ExifVersion': (0x9000) Undefined=0220 @ 579, 'EXIF FlashPixVersion': (0xA000) Undefined=0100 @ 591,

  'JPEGThumbnail': b'\xff\xd8\xf



这篇关于python 读取照片上的经纬度信息的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程