Python 2.7环境下OpenCV拍摄图片的元数据编辑方法咨询
解决Python 2.7中编辑图片EXIF元数据的方案
方案一:正确使用piexif库(可能你之前没找对标签)
很多人误以为piexif不支持相机厂商、型号和焦距,但其实它是支持的,只是需要对应正确的EXIF标签键。以下是具体实现代码:
首先确保你已经安装了piexif:
pip install piexif
然后编写代码添加元数据:
import piexif img_path = "your_image.jpg" # 读取图片现有EXIF数据(如果没有则自动初始化空字典) exif_dict = piexif.load(img_path) # 设置相机厂商、型号和焦距 # 厂商和型号直接填字符串,焦距用有理数值表示(比如50mm就是(50,1),3.5mm就是(7,2)) exif_dict["0th"][piexif.ImageIFD.Make] = "Canon" # 替换为你的相机厂商 exif_dict["0th"][piexif.ImageIFD.Model] = "EOS 5D Mark IV" # 替换为你的相机型号 exif_dict["Exif"][piexif.ExifIFD.FocalLength] = (50, 1) # 自定义焦距数值 # 将修改后的EXIF数据写入原图片 exif_bytes = piexif.dump(exif_dict) piexif.insert(exif_bytes, img_path) print("元数据已成功添加!")
如果之前你用piexif没成功,大概率是标签键用错了,上面的代码直接调用了piexif内置的常量,不会出现匹配错误。
方案二:调用ExifTool命令行工具(兼容所有属性,不受Python库限制)
如果pyexiv2安装失败,piexif也不符合需求,那ExifTool是最稳妥的选择——它是一个功能极强的跨平台元数据处理工具,支持几乎所有图片格式的元数据编辑,而且不需要依赖特殊的Python库。
步骤1:安装ExifTool
- Windows:下载解压ExifTool压缩包,把
exiftool.exe放到系统PATH目录,或者记住它的绝对路径 - macOS:通过Homebrew安装:
brew install exiftool - Linux:用包管理器安装,比如Ubuntu:
sudo apt install libimage-exiftool-perl
步骤2:Python中通过subprocess调用ExifTool
import subprocess img_path = "your_image.jpg" # 定义要设置的元数据参数 camera_make = "Canon" camera_model = "EOS 5D Mark IV" focal_length = "50.0" # 构建ExifTool命令 cmd = [ "exiftool", f"-Make={camera_make}", f"-Model={camera_model}", f"-FocalLength={focal_length}", "-overwrite_original", # 直接覆盖原文件,不加的话会生成带_original后缀的备份 img_path ] # 执行命令并处理结果 try: subprocess.check_output(cmd, stderr=subprocess.STDOUT) print("元数据已成功添加!") except subprocess.CalledProcessError as e: print("执行出错:", e.output)
这个方案的优势是支持所有EXIF属性,不受Python库的限制,而且在Python2.7下完全兼容——subprocess是Python标准库的一部分,不需要额外安装其他包。
补充:关于pyexiv2安装失败的问题
Python2.7的pyexiv2版本比较老旧,依赖的系统库(比如exiv2)版本兼容性差。如果一定要尝试使用它,可以安装专门适配Python2.7的旧版本:
pip install pyexiv2==2.3.0
不过这个版本已经停止维护,存在潜在bug,所以还是更推荐前面的两个方案。
内容的提问来源于stack exchange,提问作者figbar
相关产品推荐
相关产品推荐

