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 等。

相关推荐
pjj198544 分钟前
机器学习-NumPy2
人工智能·python·机器学习
OPEN-F16 分钟前
Python进阶教程:单元测试与代码质量
开发语言·python·单元测试
阿里嘎多学长17 分钟前
2026-08-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
其实防守也摸鱼26 分钟前
Codex破局:前端组件秒级生成的技术文章大纲
开发语言·前端·人工智能·学习·安全·web安全
Logintern0937 分钟前
装饰器和洋葱模式的区分
开发语言·python·架构
冻柠檬飞冰走茶1 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx1 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
lancyu1 小时前
# Agent Loop:AI Agent 的唯一直心骨
开发语言·javascript·人工智能
呆呆敲代码的小Y1 小时前
10 分钟搞懂 cua:开源 AI 操作电脑基础设施,附 Python 沙箱与 Agent 上手代码
人工智能·python·开源·ai agent·awesome·llm应用·cua
工具分享1 小时前
带店托管必用爆单AI选品,一人公司轻松掌握
人工智能·python