Python中exifread库使用

目录

简要介绍

库的安装

使用案例

常见问题


简要介绍

exifread 是一个用于读取图像文件 EXIF 元数据的 Python 库,能够提取图片的隐藏信息,包括经纬度、拍摄时间等信息。

库的安装

使用exifread库首先要确保已经安装

python 复制代码
pip install exifread

使用案例

python 复制代码
import exifread
from datetime import datetime

def extract_exif_data(image_path):
    with open(image_path, 'rb') as f:# 打开图像文件(二进制模式)
        tags = exifread.process_file(f)# 读取 EXIF 数据
        exif_data = {# 提取时间和经纬度信息
        'DateTime': None,
        'Latitude': None,
        'Longitude': None
    }
        
    if 'Image DateTime' in tags:# 提取拍摄时间
        exif_data['DateTime'] = str(tags['Image DateTime'])
        
    if 'GPS GPSLatitude' in tags and 'GPS GPSLongitude' in tags: # 提取经纬度信息
        latitude = tags['GPS GPSLatitude'].values
        longitude = tags['GPS GPSLongitude'].values
        
        try:# 转换经纬度格式
            exif_data['Latitude'] = convert_to_degrees(latitude)
            exif_data['Longitude'] = convert_to_degrees(longitude)
        except ZeroDivisionError:
            print("Warning: Division by zero detected in GPS data.")
            exif_data['Latitude'] = None
            exif_data['Longitude'] = None
            
    return exif_data
def convert_to_degrees(values):
    # 将 EXIF 的经纬度格式转换为十进制度数
    d = float(values[0].num) / float(values[0].den)
    m = float(values[1].num) / float(values[1].den)
    s = float(values[2].num) / float(values[2].den)
    
    # 检查分母是否为零
    if values[0].den == 0 or values[1].den == 0 or values[2].den == 0:
        raise ZeroDivisionError("Division by zero detected in GPS data.")
    return d + (m / 60.0) + (s / 3600.0)

image_path = "FF.jpg"  #图片路径

exif_data = extract_exif_data(image_path)

print(f"拍摄时间: {exif_data['DateTime']}")
print(f"纬度: {exif_data['Latitude']}")
print(f"经度: {exif_data['Longitude']}")

解析:

  1. extract_exif_data 函数:该函数用于提取图片的 EXIF 数据,包括拍摄时间和经纬度信息。

  2. convert_to_degrees 函数:该函数用于将 EXIF 的经纬度格式(度、分、秒)转换为十进制度数。

常见问题

  • 在提取图片信息时可能遇到图片的经纬度提取不成功的情况

解决:

  1. 确保手机拍摄时打开GPS
  2. 传输方式
  • 不同的传输方式可能会影响 EXIF 数据的保留。

  • 通过社交媒体或云服务传输:许多社交媒体平台(如微信、QQ、微博等)和云服务(如 Google Drive、Dropbox 等)在传输图片时会压缩图片或移除 EXIF 数据以节省存储空间和带宽。

  • 通过邮件传输:邮件服务通常会压缩附件,这可能导致 EXIF 数据丢失。

  • 通过数据线直接传输:如果使用数据线直接将图片从手机传输到电脑,EXIF 数据通常会保留。

如何保留 EXIF 数据

为了确保图片的 EXIF 数据在传输过程中不被丢失,可以采取以下措施:

  1. 使用数据线直接传输:通过数据线直接将图片从手机传输到电脑,通常可以保留 EXIF 数据。

  2. 使用支持 EXIF 的传输工具:选择支持保留 EXIF 数据的传输工具,如一些专业的文件传输应用。

  3. 避免格式转换:尽量保持图片的原始格式(如 JPEG),避免转换为其他格式(如 PNG)。

  4. 使用支持 EXIF 的图片查看器和编辑器 :选择支持保留 EXIF 数据的图片查看器和编辑器,如 exiftoolImageMagick 等。

相关推荐
XiYang-DING4 小时前
【Java EE】CAS(Compare And Swap)
java·开发语言·java-ee
OneT1me4 小时前
CVE-2026-31431 的C语言版本
c语言·开发语言·安全威胁分析
Li emily4 小时前
港股api接入指南:实时行情与历史数据获取
python·api·fastapi
AI技术增长4 小时前
Pytorch图像去噪实战(十三):DDIM加速扩散模型采样,让去噪从1000步降到50步
人工智能·pytorch·python
刀法如飞4 小时前
Python列表去重:从新手三连到高阶特技,20种解法全收录
python·算法·编程语言
小糖学代码4 小时前
LLM系列:1.python入门:16.正则表达式与文本处理 (re)
人工智能·pytorch·python·深度学习·神经网络·正则表达式
xun-ming4 小时前
AI时代Java程序员自救手册
java·开发语言·人工智能
张健11564096484 小时前
C++访问控制与友元
java·开发语言·c++
清水白石0084 小时前
从“类型体操”到工程设计:用 Python 解释协变、逆变与不变
网络·windows·python
2zcode5 小时前
基于MATLAB改进最大熵法的大规模新能源并网概率潮流计算
开发语言·matlab