如何用Python3提取PNG中名为Settings的XML格式元数据?
如何用Python 3提取PNG中"Settings"标签的XML内容
嘿,我完全懂你想用Python替代R来搞定这个PNG元数据提取的需求——其实Python也有非常直接的工具能实现,不用啃太复杂的PNG底层知识!
首先,PNG里的自定义标签(比如你说的"Settings")一般是存在tEXt块(或者压缩版的zTXt块)里的,我们可以用两个常用库来提取:
方法1:用Pillow(推荐,更简便)
Pillow是Python最常用的图像处理库,它已经封装了PNG文本块的读取逻辑,甚至会自动处理压缩的zTXt内容。
步骤:
- 先安装依赖:
pip install pillow
- 编写提取代码:
from PIL import Image # 替换成你的PNG文件路径 image_path = "your_target_image.png" # 打开图片文件 with Image.open(image_path) as img: # 从图片的info中获取所有文本块,格式为[(关键字, 内容), ...] text_chunks = img.info.get('text', []) # 遍历查找"Settings"标签 settings_content = None for key, content in text_chunks: if key.strip() == "Settings": settings_content = content break # 输出结果 if settings_content: print("成功提取到Settings标签的XML内容:") print(settings_content) else: print("未在图片中找到名为'Settings'的标签")
方法2:用pypng(更底层,适合需要自定义处理的场景)
如果你需要更深入地控制PNG块的处理,可以用pypng库,它能直接遍历PNG的所有数据块:
步骤:
- 安装依赖:
pip install pypng
- 编写提取代码:
import png image_path = "your_target_image.png" # 读取PNG文件并获取所有数据块 reader = png.Reader(filename=image_path) chunks = reader.chunks() settings_content = None for chunk_type, chunk_data in chunks: # 只处理tEXt类型的块 if chunk_type == b'tEXt': # tEXt块的结构是:关键字 + NULL分隔符 + 内容 null_sep_index = chunk_data.find(b'\x00') if null_sep_index != -1: # 解码关键字和内容为字符串 key = chunk_data[:null_sep_index].decode('utf-8') content = chunk_data[null_sep_index+1:].decode('utf-8') if key.strip() == "Settings": settings_content = content break # 如果是压缩的zTXt块,手动处理解压 elif chunk_type == b'zTXt': null_sep_index = chunk_data.find(b'\x00') if null_sep_index != -1: key = chunk_data[:null_sep_index].decode('utf-8') if key.strip() == "Settings": import zlib # 跳过压缩方法字节,解压内容 compressed_content = chunk_data[null_sep_index+2:] settings_content = zlib.decompress(compressed_content).decode('utf-8') break if settings_content: print("成功提取到Settings标签的XML内容:") print(settings_content) else: print("未在图片中找到名为'Settings'的标签")
补充说明:
- 大部分情况下用Pillow就足够了,它会自动处理tEXt和zTXt块,不需要手动解压。
- 你之前用R的
png包提取,本质上也是读取这些PNG文本块,Python的这两个库做的是完全一样的事情,只是API风格不同而已。
内容的提问来源于stack exchange,提问作者Lorem Ipsum
相关产品推荐
相关产品推荐

