W weiserv
← 返回博客

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.invert255 - c 反相;Pillow ≥ 现代版本(本机 12.3.0)打开时已基本自动正确处理,转 RGB 即可,无需手动反相。若转后整体呈「底片色」,再排查是否旧 Pillow 未处理反相标记。

环境版本

  • Pillow 12.3.0(venv envs\default
  • OS:Windows 11
广告位占位 · post-inline