CMYK 印刷展板图片批量生成,Python 程序踩坑记

文章目录

    公司要打印一批展板,要求生成的图片是 CMYK 模式的图片。但是我用 Golang 搞了半天也无法生成跟设计稿颜色一致的图片,
    对比发现生成都是 RGBA 模式的图片,颜色不对。最终使用 Python 的 Pillow 库轻松搞定。折腾了一下午,记录一下心路历程 。

    什么是 CMYK 模式

    主要用途: 印刷。专门为使用物理油墨在纸张等介质上复制颜色而设计。设计传单、海报、杂志、包装、画册等需要印刷的物料时,最终输出文件 必须是 CMYK 模式

    • C: Cyan (青色)
    • M: Magenta (品红色)
    • Y: Yellow (黄色)
    • K: Key (黑色 - Key 通常指印刷中的关键色版/定位版,也代表黑色以避免与 Blue 混淆)

    而 RGBA 则用于显示屏。

    Mac 系统自动工具

    设计的同事用的是 Mac,有几百个 PDF 文件,需要转换成图片,然后再通过程序批量生成展板图片。

    没想到用 Mac OS 系统自带的自动工具,可以轻松地实现 PDF 文件批量转 CMYK 的 JPG 图片。
    准备用 golang 内置的图片库继续下一步的处理。

    golang 不支持

    发现 golang 的 image 虽然支持 NewCMYK,但是在 Encode 时,却不支持 CMYK 模式。

    outputImg := image.NewCMYK(bgBounds)
    

    从文档看 Decode 是支持 CMYK 模式的。

    无奈找了半天也没有找到方案,我放弃了,决定试试 Python 的 PIL 库。

    Python 的实现

    首先需要安装 Pillow 库:

    pip install pillow
    

    然后,参考下面的使用方式读取 CMYK 图片,并保存。

    from PIL import Image, ImageDraw, ImageFont
    
    # 保留原始图片的ICC配置文件
    bg_img = Image.open(background_path) # 原图是 CMYK 模式的图片
    icc_profile = bg_img.info.get('icc_profile')  # 获取ICC配置文件
    
    # 各种处理,省略步骤 ...
    
    # 保存时保留ICC配置文件
    save_kwargs = {"format": "JPEG", "quality": 100}
    if icc_profile:
    	save_kwargs["icc_profile"] = icc_profile
    
    output_img.save(output_path, **save_kwargs)
    

    为何要保留 ICC 配置文件

    ICC 配置文件包含了颜色空间的信息,确保在不同设备上显示或打印时颜色的一致性。如果不保留ICC配置文件,可能会导致颜色失真或不准确。

    一开始,我让 GPT 4.1 根据 golang 的实现重写了一版 Python 的处理程序,但是打开一个 cmyk 模式的图片,作为背景,不进行任何处理,保存之后,存储的图片颜色跟原始的背景颜色不同。下面图片有两组对比颜色,上面一组是使用 ICC 配置文件前生成的图片,下面一组是保留 ICC 配置文件后生成的图片。

    颜色对比 CMYK

    让 Claude Sonnet 4 分析了一下,才找到问题:

    • ICC 颜色配置文件丢失:CMYK 图片通常包含 ICC 配置文件来定义颜色空间,但PIL在处理时可能会丢失这些配置文件。
    • 没有保留原始颜色配置文件:保存时没有指定 ICC 配置文件。

    修改成上面的代码后,存储的图片颜色跟原始的背景颜色一致了。

    ICC 配置文件存在于哪些格式的图片中

    除了特定专业领域外,嵌入ICC通常只是可选操作。但为了色彩准确性,推荐在出版印刷等场景主动嵌入配置文件。

    • 可靠嵌入支持: TIFF, JPEG, PSD, EPS, PDF, WebP, HEIF/HEIC, JPEG 2000, DNG (可选)。
    • 规范支持但兼容性需注意: PNG。
    • 通常不支持: GIF, BMP。
    • RAW 文件: 专有 RAW 一般不直接嵌入 ICC,色彩意图由处理软件管理;DNG 支持嵌入。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式