ICC 与位深
psdkit 的原则是不悄悄改变样本:读取保持原位深与浮点位型,不自动做色彩转换、量化或去白 matte。显示转换、降位和 HDR 处理都由调用方显式选择。
位深
| 位深 | 读取 | 合成 |
|---|---|---|
| 1 位 | 按行 MSB-first 打包 | 通过 RGB8 快照 |
| 8 位 | 字节样本 | RGB8 核心合成(完整支持范围) |
| 16 位 | 大端字节 | RenderSourcePrecision 有限合成、区域与分块 |
| 32 位浮点 | 大端字节,保留 NaN / 负零 | 同上,非有限值策略显式选择 |
float, err := psdkit.RenderSourcePrecision(ctx, source)
if err != nil {
return err // 高位深的高级图层与全混合尚未完成
}
// float.Pix 为直通 RGBA float64 样本,SourceDepth / ICCProfile 记录来源
fmt.Println(float.Width, float.Height, float.SourceDepth)
RenderSourcePrecision 只接受 16/32 位 RGB 或灰度文档,8 位文档返回 unsupported,请使用 RGB8 入口。RenderSourcePrecisionTile 和 VisitSourcePrecisionTiles 按区域 / 分块计算;PrecisionOptions 默认 256 MiB 工作内存、两千万画布像素、一万个图层和 64 层嵌套。浏览器 SDK 把大浮点数组作为小端 .f64le 二进制输出,不自动量化 HDR。
RGB16 的 Normal / Normal-Difference 整数路径现在允许明确禁用且元数据已知的像素蒙版,禁用蒙版样本不参与读取或合成。结果沿用原有整数算法,和无蒙版基线一致;活动蒙版不扩大该路径的资格,未知蒙版也不会被提升为已验证整数路径。
高位深蒙版可通过 SetPixelMask 编辑;保存仍须提供准确、匹配原位深的 SaveOptions.Composite。已覆盖 PSD/PSB 四种通道压缩的保存重开、源精度全图/区域重绘和继续编辑,自动 RGB8 保存预览仍不适用。
ICC 与显示转换
| 入口 | 说明 |
|---|---|
ReadSourceRGBProfile |
读取文档内原始 ICC |
DecodeDisplayComposite + DisplayOptions |
保存合成图按源配置文件显示转换 |
ConvertSamples |
把源精度样本转为显示用 NRGBA |
TransformProfile / ProfileTransformWorkingBytes |
RGB8 图像在两个 ICC 之间转换及预算 |
支持 RGB matrix/TRC 配置文件与部分 LUT / CMYK。渲染意图默认为相对比色,绝对比色未实现;提供了却不支持的配置文件不会被静默忽略,而是报错。
需要显式选择的策略
| 策略 | 选项 |
|---|---|
| 忽略源配置文件 | DisplayOptions.IgnoreSourceProfile,或传入空的非 nil Color.ICCProfile |
| 无管理 CMYK 近似回退 | ColorOptions.AllowUnmanagedCMYK(仅在未提供 ICC 时生效) |
| 非有限值与色调映射 | ColorOptions.NonFinite、ColorOptions.ToneMap |
| 忽略透明度 | DisplayOptions.IgnoreTransparency |
go run ./examples/color -psd /tmp/new.psd -out /tmp/display.png
go run ./examples/precision -help
[!NOTE] 色彩显示转换成功,不代表高位深的高级图层可以实时合成。完整边界见能力矩阵。