CMYK 模式 JPG 直接送矢量化会丢色:用 Pillow 先转 RGB(含 Adobe 反相标记处理)
一句话结论
CMYK 模式 JPG 不能直接喂 vtracer 描摹,否则描摹器把 CMYK 当 RGB 解释,红金主色严重偏色。必须先 Image.convert("RGB") 再描摹;现代 Pillow 打开 CMYK JPEG 时已自动处理 Adobe APP14 反相标记,转 RGB 后配色无损。
场景与触发
- 任务:把
羊年吉羊_原图.jpg彩色描摹成矢量 AI(印刷用,需 CMYK)。 - 源图
Image.open(...).mode == "CMYK"(1280×1280)。 - 直接拿 CMYK 图去 vtracer → 描摹结果颜色失真(非异常,是静默偏色,肉眼/渲染可辨)。
关键现象(非异常,是偏色)
CMYK 四个通道被当成 RGB 三通道解释,色相整体偏移。没有报错,只在最终渲染时暴露——所以必须在描摹前就转 RGB。
解决命令(可复制)
from PIL import Image
im = Image.open(r"羊年吉羊_原图.jpg") # 换成你的源图路径;mode == "CMYK"
print(im.mode) # -> CMYK
if im.mode == "CMYK":
im = im.convert("RGB") # 现代 Pillow 自动处理 Adobe APP14 反相标记
im.save(r"印刷输出\_原图_rgb.png") # 输出到你自己的目录
print(im.mode) # -> RGB
验证结果(真实性自证)
| 校验项 | 结果 |
|---|---|
| 源图模式 | CMYK(1280×1280) |
| 转 RGB 后模式 | RGB |
| 主色保真 | 红金配色无损(内部渲染目检一致;按作者要求不对外提供任何图片) |
反相标记说明:CMYK JPEG 常带 Adobe APP14 段表示「反转(inverted)」。旧版 Pillow 需手动
ImageOps.invert或255 - c反相;Pillow ≥ 现代版本(本机 12.3.0)打开时已基本自动正确处理,转 RGB 即可,无需手动反相。若转后整体呈「底片色」,再排查是否旧 Pillow 未处理反相标记。
环境版本
- Pillow 12.3.0(venv
envs\default) - OS:Windows 11
广告位占位 · post-inline