Python3.8读取Win10下JPEG文件Phenom-World自定义元数据问题咨询
读取JPEG自定义元数据标签「Phenom-World」解决方案
问题前提
- 耗时16小时尝试读取JPEG文件属性中名为Phenom-World的自定义标签数据失败
- 已尝试方案均只能读取常规文件属性,无法获取目标标签内容
- 读取标准Exif信息
- 调用Win32com接口
- 使用
os.stat方法
- 补充说明:该标签为飞纳电镜(Phenom-World)生成的专用元数据,嵌入在文件内部,仅安装对应厂商软件的Windows设备可在文件属性详情页直接查看,无对应软件时该元数据处于隐藏状态
- 运行环境:Python 3.8、Windows 10系统
可行解决方案
方案1:使用ExifTool + PyExifTool 读取(最稳定)
ExifTool支持解析几乎所有厂商自定义的图像元数据,可直接识别Phenom系列设备写入的专用标签。
操作步骤:
- 下载Windows版ExifTool可执行文件,将其重命名为
exiftool.exe,放入Python脚本同级目录或系统环境变量可识别的路径下 - 安装Python依赖包:
pip install pyexiftool
- 读取代码示例:
from exiftool import ExifToolHelper with ExifToolHelper() as et: # 读取目标文件所有元数据 metadata = et.get_metadata("6.jpeg") # 筛选Phenom-World相关标签 phenom_data = {k:v for k,v in metadata[0].items() if "Phenom" in k or "phenom" in k} print(phenom_data)
运行后即可输出所有Phenom-World标签下的全部数据。
方案2:二进制解析JPEG应用段(无额外依赖)
Phenom写入的自定义元数据存储在JPEG的非标准APP应用段中,可直接通过二进制读取文件定位对应段提取内容:
def read_phenom_metadata(file_path): with open(file_path, "rb") as f: data = f.read() # JPEG段起始标识为0xFF,APP段标识范围0xFFE1~0xFFEF pos = 0 while pos < len(data) - 4: if data[pos] == 0xFF: # 识别APP段 if 0xE1 <= data[pos+1] <= 0xEF: seg_len = int.from_bytes(data[pos+2:pos+4], byteorder="big") seg_content = data[pos+4:pos+2+seg_len] # 匹配Phenom-World标识 if b"Phenom-World" in seg_content: return seg_content.decode(errors="ignore") pos += 2 + int.from_bytes(data[pos+2:pos+4], byteorder="big") else: pos += 1 return None phenom_content = read_phenom_metadata("6.jpeg") print(phenom_content)
该方案无需安装额外软件,可直接提取目标段的原始内容自行解析。
注意事项
- 若使用方案1,需确保
exiftool.exe的路径可被程序正常调用,若未放入系统路径,可在初始化ExifToolHelper时指定路径参数 - 若解析出的内容为结构化格式,可根据实际输出的分隔符进一步提取对应字段值
内容的提问来源于stack exchange,提问作者Te Ka
相关产品推荐
相关产品推荐

