Skip to content

Repository files navigation

RGB → CMYK 图片转换器

本地运行的 RGB 转 CMYK 小工具,基于 Flask + Pillow + ICC 色彩管理。支持印刷 ICC、手动调整、条带预览与批量输出;文件不离开本机。


目录


功能概览

能力 说明
印刷 CMYK 使用 ICC 将 sRGB 映射到目标印刷 CMYK,非简单伪转换
激光打印机(RGB 输出) 可选仅输出 sRGB 优化图,不转四色,适合桌面彩机
多种 ICC 预设 FOGRA、ISO、ECI、日本、北美等(具体以 Web 界面列表为准,可自上传)
手动调整 亮/对比/饱和/色温、四色偏移、TAC 总墨量限制
三档模拟 + 条带 屏幕 / 激光模拟 / 印刷·CMYK 软打样;左右对比预览
成品预览 转换完成后可加载「成品图」到右侧,与条带同逻辑的高清预览
灯箱放大 点击条带可拉高清、缩放平移(适应窗口 / 1:1)
本地运行 数据不上公网,适合内网/离线环境

环境要求与启动

  • Python 3.10+(3.8+ 通常也可,以本机测试为准)
  • 首次使用需 安装依赖;ICC 可运行 python download_profiles.py 或按界面提示准备 profiles/

Windows(推荐)

双击 start.bat,会依次:

  1. 结束占用 5000 端口的旧进程(避免改代码后仍跑旧服务)
  2. pip install -r requirements.txt
  3. 启动 python app.py 并打开浏览器

在命令行中亦可:

pip install -r requirements.txt
python download_profiles.py    # 首次或缺少 ICC 时
python app.py

浏览器访问:http://127.0.0.1:5000 。停止服务:运行窗口中按 Ctrl+C


两种输出模式

模式 说明
印刷厂·CMYK 走 RGB →(ICC)→ CMYK,可输出 TIFF / JPEG / PDF,建议嵌入 ICC 以便印厂/软件正确解读
激光打印机·RGB 在 RGB 空间做预补偿,输出带 sRGB ICC 的 JPEG/PNG/TIFF,适合直接打驱动

在界面顶部切换;激光模式会套用一套默认建议参数,并可与「激光」条带模拟对照。


条带与预览

  • :当前图的 RGB(或屏幕模式下与右侧同源)
  • :依所选 模拟 从服务端生成 JPEG 条带图(长边有下限,避免过糊),浏览器用 <img> 显示,与下载文件走同一套色彩管线后再缩小分辨率
  • 三种模拟
    • 屏幕显示:仅原图,不做分色模拟
    • 激光打印机:纯 RGB 观感模拟(与印刷 ICC 不同管线)
    • 印刷·CMYK:先 CMYK 再软打样为屏显 sRGB,便于与印刷意匠对照
  • 点击放大:再请求更高 max_side 的图进灯箱,可缩放、拖拽;若觉与条带略有色差,多为缩放与不同查看器对 CMYK 的解读差异(见常见问题

说明:早期文档若写「最长边 600px」或「Canvas 绘制」已过时;当前以仓库内 app.pytemplates/index.html 为准。


ICC 与内嵌信息

  • 选择 非「简单数学 / basic」profiles/存在对应 ICC 时,CMYK 导出会尽量 内嵌该 ICC 字节 到 JPEG/TIFF(以及 PDF 内嵌图)。
  • 选择 基础转换 时,不内嵌印刷 ICC;各软件可能按内置公式把 CMYK 当屏显,观感会与软打样条带有差别。
  • 激光(RGB)导出:在支持时内嵌 sRGB 配置。
  • 转换成功后,队列中会标注 「已内嵌 ICC」/「未内嵌 ICC」(接口字段 icc_embedded),便于核对。

内置/可选印刷标准的名称、标签以 Web 页面 ICC 区 为准(含 ECI ISO、PSO、非涂布、日本/北美等);亦可 上传自定义 .icc / .icm(界面「上传」入口)。

色彩转换要点(实现上)

  • 优先使用 ImageCms.buildTransform 建链,失败时回退到 profileToProfile 等,减轻部分环境报 cannot build transform 的问题。
  • 条带/灯箱里的 CMYK→sRGB 与「成品图浏览器预览」尽量 同一类 profileToProfile 多意图重试,减少条带过亮/过白与下载后在其他软件中观感不一致。

手动调整与 TAC

  • RGB 阶段:亮度、对比度、饱和度、色温(在 ICC 转 CMYK 之前)。
  • CMYK 阶段:C/M/Y/K 通道微调(%),TAC 总墨量上限(如 300%),超限时按比例压墨。
  • 界面可加载 预设、保存/恢复自己的参数组合等(以页面为准)。

支持格式与输出

输入
JPG、PNG、TIFF、BMP、WEBP、PDF(多页按页处理)。

输出(印刷模式)
TIFF(LZW)、JPEG(高质)、PDF(内嵌 CMYK 图像,版式按 300DPI 换算等逻辑)。

输出(激光模式)
JPEG、PNG、TIFF,嵌入 sRGB ICC(如生成成功)。


批量与下载

支持多文件入队、逐条转换;每条成功后可单文件下载,全部结束后可 ZIP 打包下载(以界面按钮为准)。


浏览器扩展(取色)

若仓库内包含 manifest.json(Manifest V3),可在 Chrome/Edge 开发者模式下 「加载已解压的扩展」 指向本项目目录,使用弹窗内 RGB / HEX 与 CMYK 大致换算 等能力(与主站转换引擎独立,精度以扩展内说明为准)。


项目结构(摘要)

路径 说明
app.py Flask 应用:上传、转换、预览、下载、API
templates/index.html 单页前端(条带、灯箱、调整区、队列表)
start.bat Windows 一键装依赖、杀旧进程、启服务
requirements.txt Python 依赖
download_profiles.py 拉取/准备 ICC 的辅助脚本
profiles/ 放 ICC 的目录,界面也可上传至此
uploads/ 临时上传(转换后清理)
outputs/ 转换结果(可自行定期清理)
manifest.json 浏览器扩展(若使用)

依赖

用途
flask Web 与路由
Pillow 图像、ICC、编码
PyMuPDF (fitz) PDF 光栅化
reportlab 生成内嵌图片的 PDF
numpy 通道与 TAC 的像素运算

技术说明(摘要)

  1. 大图可先按 proc_limit 在入 ICC 前限边,以控制内存,再与全尺寸意匠对齐。
  2. 条带/灯箱预览为 sRGB JPEG;下载的 CMYK 文件在不同查看器里会按各自 CMS 转屏,与浏览器里看到的条带不会像素级相同,属正常现象。
  3. TAC 为四通道 0–255 求和后超过阈值则整体缩放。
  4. PDF 输入:按设定 DPI 渲染为 RGB 再走同一套转 CMYK 流程。

更细的公式与管线以源码注释为准。


常见问题

Q:预览比下载更亮/更白?
A:预览是软打样到 sRGB 的图;下载是 CMYK(+内嵌 ICC)。浏览器与 Photoshop/ACDSee 的转换链不同,会存在观感差。已尽量让条带与「成品预览」用相近的 profileToProfile 流程;选择 带 ICC 的印刷预设 并在支持 ICC 的软件里看下载文件,最接近印刷意图。

Q:报 cannot build transform
A:多由 ICC 与 LCMS 组合不兼容导致。已增加多意图/多旗标重试与回退;仍失败时请换 ICC 或更新 Pillow,把完整错误信息发 Issue。

Q:基础模式与带 ICC 差别?
A:基础模式快,但不内嵌印刷 ICC,色彩仅作粗映射;正式出片请选 ECI/FOGRA/PSO 等并保证 profiles/ 文件存在。

Q:能加自己的 ICC 吗?
A:可以。在页面 上传自定义 ICC 或把 .icc 放进 profiles/ 后刷新列表。

Q:outputs 会占满硬盘吗?
A:转换结果会累积在 outputs/,可手工删除,不影响程序。

Q:为什么要先杀 5000 端口再启?
A:避免旧 python app.py 未退出,你改了代码却仍在用旧进程,条带/接口行为不更新。


附录:参数细节

本附录保留与实现对照的细项,正文其它章节保持摘要叙述;实现以 app.py 为准,此处便于查表、审阅与版本对比(含原先较长的 ICC 说明表与色温/通道公式)。

A. 内置 ICC 注册表(ICC_REGISTRY

profile_id 分组 标签 对应 ICC 文件名 说明
basic 通用 (无,不加载 ICC) 简单数学公式,无色彩管理,速度最快,色彩略偏黄
iso_v2 国际标准 国内通用 ISOcoated_v2_eci.icc ISO 12647-2:2004 铜版纸国际标准,国内大多数印厂的参考基准
iso_v2_300 国际标准 国内推荐 ISOcoated_v2_300_eci.icc ISO Coated v2 限墨 300% 版本,适合高密度铜版纸,国内印厂交付首选
pso_v3 国际标准 最新标准 PSOcoated_v3.icc ISO 12647-2:2013 最新欧洲标准,色域更宽、暗部更丰富,替代 FOGRA39
fogra39 欧洲 经典 CoatedFOGRA39.icc ISO 12647-2:2004/Amd1 欧洲铜版纸经典标准,色彩稳定,兼容性最广
fogra27 欧洲 CoatedFOGRA27.icc 旧版欧洲铜版纸标准,色域稍宽,适合兼容老工作流
pso_uncoated 非涂布纸 非涂布纸 PSO_Uncoated_ISO12647_eci.icc 非涂布纸(胶版纸、书写纸)标准,TAC 260%,适合书籍、文件印刷
iso_uncoated 非涂布纸 新闻纸 ISOuncoatedyellowish.icc 偏黄调非涂布纸标准,适合新闻纸、低克重印刷,TAC 240%
lwc 非涂布纸 杂志纸 PSO_LWC_Improved_eci.icc 轻量涂布纸(杂志纸)标准,介于铜版纸与胶版纸之间
japan_color 日本 动漫/插画 JapanColor2001Coated.icc 日本铜版纸标准,冷色还原准,适合动漫/插画/机甲,Y 通道偏低
gracol 北美 北美 CoatedGRACoL2006.icc 北美铜版纸标准(G7),黑色更深,适合北美印厂
swop 北美 USWebCoatedSWOP.icc 北美网版印刷标准,Y 通道偏高偏黄,不建议用于精细作品

profiles/ 中其它 .icc / .icm 由界面以 custom:文件名 使用,不列入上表。文件需实际存在,列表中才会为「可用」。

B. RGB 调整与「色温」公式(apply_rgb_adjustments

ICC 转 CMYK 之前 执行。brightness / contrast / saturation / warmth 取值约 -100~+100(界面滑块范围以页面为准),未实现的项视为 0。

实现要点
亮度 factor = 1 + brightness/100ImageEnhance.Brightnessenhance(max(0, factor))
对比度 factor = 1 + contrast/100ImageEnhance.Contrast 同上
饱和度 factor = 1 + saturation/100ImageEnhance.Color 同上(与 Pillow 的 Color 增强一致)
色温 warmth 负值偏冷/减黄,正值偏暖。令 shift = warmth × 0.8(浮点),则 R' = clip(R + shift, 0, 255)B' = clip(B − shift × 0.6, 0, 255)G 不变;与物理白点重标定不同,为快捷观感调整

C. CMYK 通道与 TAC(apply_cmyk_adjustments

ICC 得到 CMYK 之后 应用。c_offsetk_offset-30~+30(单位 %)tac 为总墨量上限(如 240~340,单位 %)。

  • 通道偏移:每个偏移量 offset(%)对应整型增量 int(offset × 2.55)(向零截断)加到该通道 0–255 上并裁剪。
  • TACtac_val = tac × 2.55;若 C+M+Y+K > tac_val 的像素,将四色同乘 tac_val / (C+M+Y+K) 以压到上限内。

(若全通道无偏移且 tac ≥ 340,函数会直接返回,不做像素运算。)

D. 激光打印机模式:默认与条带模拟常数

默认预补偿LASER_DEFAULT_ADJ,用于「激光打印机·RGB」导出的未覆盖项):

brightness 7
contrast 5
saturation 10
warmth -3
c/m/y/k_offset 0
tac 300

条带「激光打印机」模拟simulate_laser_print 使用的 _LASER_SIM,与胶印软打样刻意区分,不经 ICC 分色):

说明(摘自源码注释意涵)
brightness 0.78 Pillow 亮度增强因子
saturation 0.58 Color 增强因子
contrast 1.14 对比度增强因子
warm_r / warm_g / warm_b 6 / 3 / -14 轻微暖纸、略压蓝,再裁剪到 0–255
blur 0.85 GaussianBlur 半径,模拟办公机+纸的略糊

E. 其它(摘要中已提及)

  • 大图可先按 proc_limit 限边再进 ICC,与全尺寸意匠策略一致。
  • 若实现与本文附录有任何不一致,app.py 当前代码为唯一权威;修订代码时可同步更新本附录表格。

许可与免责

本工具按「依原样」提供;印刷色彩以印厂实机打样为准。使用第三方 ICC 时请遵守其版权与许可要求。

About

rgb格式图片转换cmyk格式图片

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages