颜色配置元数据读取的边界
主图文件有哪些颜色配置:Pillow读取ICC与模式
选择亚马逊主图 AI 制作路径时,拿到候选文件后还可以做一个很窄的检查:它采用什么颜色模式,是否带有 ICC 配置。这个检查不评判颜色准确性,也不决定平台准入;它只是把文件中可读取的元数据交给后续处理。相比直接把所有图片转成一种格式,先知道输入是什么,更容易发现不同来源的交付文件。
Pillow 的 Image 对象提供 mode、size、format 和 info 等信息[2]。mode 是像素表示方式,format 是识别到的文件格式,info 中可能有 icc_profile 字节。没有该字段只说明文件里未读到对应数据,不能推出颜色有问题;有字段也不能推出配置可靠。本文读取字节长度,不解析配置内容、不做色彩转换,也不写回原文件。
函数接收本地文件路径,用上下文管理器打开图片,并调用 load 读取像素。这样格式识别成功但像素读取失败的文件会进入错误路径,不仅停留在文件头检查。它返回一个可以序列化的字典,尺寸转为列表,配置只报告长度;不把二进制配置全文写进日志,也不记录图片内容。批次处理时调用者可将文件名与这个结果对应。
from PIL import Image
def image_metadata(file):
with Image.open(file) as im:
im.load()
icc=im.info.get('icc_profile')
return {'format':im.format,'mode':im.mode,'size':list(im.size),'icc_bytes':len(icc) if isinstance(icc,bytes) else 0}
输入应是团队自己的静态候选图片,调用前限定文件目录。遇到损坏或不支持的文件,保留异常类型与对应文件,让它进入待处理队列;不要在异常分支返回一份假定的 RGB 结果。是否允许多帧、是否还要检查透明通道,是另一层契约,本例没有覆盖。需要这些条件时,应增加独立判断,不能从模式读取推出全部文件要求通过。
本地验证使用合成的小图片检查普通 RGB、带配置字节的 RGBA 和无法解码的文件。配置字节只是验证长度读取的夹具,并不是有效色彩配置;代码记录的是逻辑结果,不是显示器、印刷或平台色彩测试。公开文档与运行环境可能有版本差异,使用前核对自己安装的 Pillow。本次记录保存了运行版本和分支,不把它写成 Picset 的输出性能。
Picset 产品精修页提供背景、尺寸比例和清晰度选项[1],可用于准备商品候选;下载后读元数据是本地交接环节,不是该页面自动执行的功能。如果任务是亚马逊主图,主体、销售组成、背景和所在类目的当前图片规则还需分别核对。Python 报告不能证明这些条件,也不应凭文件可打开就称候选可直接上架。
当多张图模式不同,先追溯来源和导出设置,再决定是否转换。不要只因 CMYK、调色板或 RGBA 出现就批量覆盖文件,修改可能影响透明和色彩解释。转换应写到新文件,保留原始版本,并由合适的视觉检查确认结果;本篇故意不提供转换函数,以免把观察工具扩成未经评估的批处理改写。
报告中可把文件读取、商品身份和平台规则设成独立栏。读取成功那一栏回答文件有没有可读元数据,商品身份那一栏回到原图检查,平台规则那一栏登记当前官方文件。三栏互不替代,才不会出现“脚本通过,所以主图合规”的错误结论。选 AI 作图工具同样如此:生成入口、下载文件与最终采用,是一条路径中的不同事实。若报告用于团队交接,给它加上读取时间和文件版本,避免后来替换了图片却继续引用旧结果;元数据也需要与当前文件对应。
参考资料
[1] Picset 当前公开工作室页面