PhotoCraft色彩管理深度指南:纯Rust实现ICC、软校样与CMYK/Lab文档支持
【免费下载链接】photocraftAn open-source, clean-room reimplementation of Adobe Photoshop in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraft
PhotoCraft 是一款用纯 Rust 编写的开源图像编辑器(Adobe Photoshop 的 clean-room 重实现),其色彩管理系统由独立 crate crates/cms/ 完整实现:解析 ICC v2/v4 配置文件、在屏幕软校样中模拟 CMYK 印刷、并原生支持 CMYK 与 Lab 色彩模式文档——全部代码无 C 依赖、无unsafe,可逐行审计。
🎯 一个 crate 搞定全部色彩计算
PhotoCraft 的色彩模块 photocraft-cms 是唯一负责色彩转换的 crate,设计上刻意做到"零工作区依赖",方便单独发布与审计:
Profile:解析 ICC 配置文件(matrix/TRC 型 RGB、灰度 TRC、mft1/mAB/mBALUT 型含 CMYK↔Lab、curv/para曲线),并能写出 ICC v4 文件(crates/cms/src/profile.rs)Transform:通过 PCS(D50 下的 XYZ/Lab)连接两个档案,按渲染意图转换 8/16 位与浮点像素Lut3d:把显示变换采样成 3D 纹理,直接喂给 GPU 画布GamutCheck:基于 ΔE 的出界色域检测,即"色域警告"
实现依据是公开的 ICC.1:2010 (v4.3)、ICC.1:2001-04 (v2) 规范、CIE 15 与 Adobe 公开的黑点补偿论文(见 crates/cms/src/lib.rs)。
📦 内置档案:开箱即用的 10 种色彩空间
不安装任何外部档案,PhotoCraft 自带一整套 CC0 协议的内置档案(crates/cms/src/builtin.rs):
| 档案 | 说明 |
|---|---|
srgb | sRGB IEC61966-2.1(默认 RGB 工作空间) |
display-p3 | Display P3,宽色域屏首选 |
adobe-rgb-compat | Adobe RGB (1998) 兼容 |
prophoto-compat | ProPhoto 兼容(ROMM primaries) |
rec2020 | Rec. 2020 超宽色域 |
sgray/gray-gamma-2.2 | 灰度工作空间 |
lab-d50 | Lab 恒等档案(v4 编码) |
coated-cmyk | 自研 Photocraft Coated CMYK,默认 CMYK |
其中最有趣的是 CMYK 档案。Adobe 的印刷档案(SWOP、FOGRA39)是专有版权,市面免费下载的档案又带有分发限制,所以 PhotoCraft自己合成了一份(crates/cms/src/synth.rs):
- 基于 Yule–Nielsen 修正 Neugebauer 油墨叠印模型(n = 2)
- 16 种叠印对照 ISO 12647-2 胶印纸 Lab 目标
- 抛物线网点扩大(CMY 14%、K 50% 处 17%)、GCR 黑色生成、总墨量 300%
- 感知表带 L* 黑点缩放与针对采样色域边界的柔和彩度压缩
产物就是仓库里的 photocraft-coated-cmyk.icc(237 KB,CC0-1.0 公共领域)。文档中也坦率提示:它是"合理的胶印模拟档案",正式印刷请仍使用打印机厂商档案。
🎨 四种渲染意图与黑点补偿
Intent枚举完整实现 ICC 的四种渲染意图(crates/cms/src/lib.rs):
- Perceptual(感知)——整体色调优先,适合照片
- Relative Colorimetric(相对色度)——保留中性灰,PhotoCraft 显示档案的默认意图
- Saturation(饱和度)——图形与图表
- Absolute Colorimetric(绝对色度)——精确测量场景
同时实现了 Adobe 公开的**黑点补偿(BPC)**算法:使用中性黑点(仅 Y 通道)在 XYZ 线性映射,解决 CMYK 文档在屏幕校样时死黑偏色的经典问题。
🖨️ 软校样:在屏幕上预览印刷效果
PhotoCraft 的软校样不止"套个档案"这么简单,crates/engine/src/proof_sim.rs 把 Photoshop 的 View › Proof Setup 完整搬了过来:
- 档案校样:Working CMYK 或自定义档案,含意图与 BPC 选项
- 分色预览:单独查看 C、M、Y、K 任一色版(用灰墨呈现),或 CMY 三色版组合
- Legacy Macintosh RGB:以 gamma 1.8 显示旧 Mac RGB 数值
- 色盲模拟:红色弱(Protanopia)与绿色弱(Deuteranopia),采用 Viénot/Brettel/Mollon 1999 论文算法
- 32 位预览选项:对 HDR 文档做曝光(±20 档)与 gamma 调整,在显示变换前于线性光域中执行
校样链路最终被采样成一张 3D LUT 纹理(Lut3d),叠到 GPU 画布上,软校样几乎零性能开销。
配合GamutCheck(crates/cms/src/gamut.rs)可以按 ΔE 阈值标出校样色域外的颜色——也就是"色域警告",让你提前知道哪些颜色印不出来。
🖥️ 显示器色彩管理与画布显示
画布显示链路在 crates/engine/src/display_color.rs:
- 文档档案 → 显示器档案的变换自动折叠进显示 LUT(GPU 画布)或 8 位 CPU 变换
- 显示器档案来自编辑 › 色彩设置 › 显示器档案:自动(跟随系统主显示器)、内置档案或手动指定
.icc文件 - 文档与显示器匹配时(sRGB 对 sRGB)变换被识别为恒等变换并直接跳过
- 监视器变换固定采用相对色度意图 + 黑点补偿,与 Photoshop 的屏幕显示行为一致
- 线性/HDR 复合图以 sRGB 曲线编码进画布纹理,保证暗部精度
📐 CMYK 与 Lab 文档模式
文档色彩模式在 crates/engine/src/mode_cmds.rs 中支持完整的 6 种模式:RGB、灰度、索引、双色调、CMYK、Lab。转换逻辑集中在 crates/engine/src/color_cmds.rs,例如 CMYK 文档的复合结果通过文档 CMYK 档案按 sRGB 读出显示,Lab 文档则直接以 Lab 数值作画布源档案。
✨ 小结
PhotoCraft 用不到千行核心代码量的纯 Rust crate,重建了一条完整的色彩管理链路:ICC v2/v4 解析 → PCS 变换 → 渲染意图/BPC → GPU 3D LUT 显示 → 软校样与色域警告。对新手来说,它让"颜色在屏幕和纸上一致"这件原本昂贵而复杂的事,变成开箱即用的免费能力。
想深入阅读?建议从这两处入手:
- 色彩管理 crate 说明:crates/cms/README.md
- 软校样实现:crates/engine/src/proof_sim.rs
【免费下载链接】photocraftAn open-source, clean-room reimplementation of Adobe Photoshop in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraft
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考