效果、调整与填充
这一组图层在文件中以参数形式保存,psdkit 可以完整解析它们的参数,并在声明范围内实时重绘。范围之外的组合返回 unsupported;需要近似时由调用方显式开启。
图层效果
| 能力 | 入口 | 范围 |
|---|---|---|
| 解析 | source.DecodeEffects |
全部效果描述符 |
| 编辑 | Editor.SetEffects / SetEffectsWithOptions |
受支持的效果参数 |
| 光栅化 | psdeffects.Rasterize、EstimateWorking、Validate |
颜色叠加、受限阴影、发光与描边 |
| 近似 | ApproximateDropShadow |
显式开启的投影近似 |
尚未完成:全部效果、轮廓(Contour)、活动 Noise/Jitter 与复杂组合。
已禁用的像素蒙版和矢量蒙版不参与覆盖计算,因此不再阻断上述受支持效果的实时重绘。可用 SetPixelMask / SetVectorMask 禁用蒙版,再自动保存和重开;蒙版参数与采样仍保留。重新启用后,活动蒙版与效果的组合继续按原有资格检查,超出范围返回 unsupported。显式投影和智能对象颜色叠加路径也接受禁用矢量蒙版,仍需开启各自近似选项。
以下 RGB8 蒙版与来源效果组合可编辑已有效果,并在各自声明的范围内自动保存 PSD/PSB、重新打开和继续编辑;具体来源类型与策略以下表为准:
| 组合 | 调用与边界 |
|---|---|
| 颜色叠加+活动矢量蒙版 | SetEffects;矢量蒙版不羽化,支持其已有密度、反相和受支持路径 |
| 纯颜色叠加+已校准矩形矢量羽化 | SetEffects;普通 RGB8 Normal 栅格、单整数矩形、0.5/1.5/3 像素羽化、无活动像素蒙版;沿用现有羽化核,无需新增近似 |
| 颜色叠加+活动像素/矢量双蒙版 | SetEffects;两个蒙版均不羽化,覆盖率相乘;原有蒙版参数、样本和路径保留 |
| 颜色叠加+投影+活动像素蒙版 | SetEffectsWithOptions,显式开启 ApproximateDropShadow;支持多个已有颜色叠加与投影,投影限 Normal / Multiply,颜色叠加使用已支持的混合模式 |
| 投影(可含颜色叠加)+活动矢量/双蒙版 | SetEffectsWithOptions,显式开启 ApproximateDropShadow;普通 Normal 栅格,两个活动蒙版均不羽化,保留密度、反相、链接状态和已有路径 |
| 投影(可含颜色叠加)+已校准矢量/双蒙版羽化 | SetEffectsWithOptions,显式开启 ApproximateDropShadow;普通 RGB8 Normal 栅格、单整数矩形矢量蒙版、矢量羽化 0.5/1.5/3;活动像素蒙版沿用已有羽化模型,各自保留塑形与最终隐藏阶段 |
| 智能对象实时来源+投影与颜色叠加 | SetEffectsWithOptions,显式开启 ApproximateDropShadow;RGB8、混合效果要求 Normal,支持当前来源替换与像素蒙版阶段,不使用旧实例栅格;严格可重建的嵌入来源可自动保存重开续编 |
纯颜色叠加没有外部效果区域,蒙版“隐藏效果”控制在上述范围内得到相同的覆盖结果。阴影组合则分别遵循像素蒙版的 lmgm 和矢量蒙版的 vmgm:先塑形时影响图层和投影来源,隐藏效果时作用于最终图层与效果结果。双蒙版可以分别选择阶段:塑形覆盖率相乘后统一量化一次,最终遮罩覆盖率相乘后做一次预乘透明度插值,避免重复应用蒙版。保留 Fill、Opacity、Blend Interior、Layer Conceals 及效果顺序。
矩形羽化与纯颜色叠加可保留已有密度、反相及隐藏效果阶段,也可保留已禁用像素蒙版的原始采样。编辑、自动保存和重开均使用当前几何与羽化参数;颜色叠加不透明度为 0 后仍可保存并继续编辑。纯颜色叠加单独使用时仍不支持活动双蒙版羽化。验证复用已有原生羽化 Alpha 采样点,再独立核对卷积和预乘颜色叠加,不代表任意 Photoshop 组合逐像素一致。
已校准矩形矢量羽化也可参与显式近似阴影:纯阴影和阴影+颜色叠加都支持矢量单蒙版及活动双蒙版。像素蒙版沿用已有受预算限制的羽化模型;即使矢量羽化为 0,只要新增组合包含活动像素羽化,也要求矢量几何为单整数矩形。每个蒙版先分别计算羽化、反相和密度,再按自己的 lmgm/vmgm 阶段参与塑形或遮住最终效果,不提前烘焙到图层原始像素。
阴影塑形所需的羽化缓存包含整个来源图层,覆盖输出区域外和画布外会投影进来的像素;最终隐藏阶段仅计算所需输出区域。共享几何与同一羽化半径会合并必要采样域,并按实际域计入工作预算。验证包括独立羽化积分与标量阴影参考、整图/ROI、PSD/PSB 四压缩的两轮编辑保存重开,以及原生 JSON 和真实 Wasm。羽化部分沿用既有矩形校准,阴影仍是显式近似模型,不能据此宣称整个组合与 Photoshop 逐像素一致。其他矢量半径、曲线、非整数边缘、多子路径及高级组合继续拒绝。
lmgm/vmgm 的显式值优先;缺省时按各蒙版的原始链接状态,未链接的蒙版作用于最终结果。矢量蒙版对应 NotLinked。这一缺省规则来自 Adobe PSD 格式规范的全局蒙版定义,阴影采样仍是显式近似模型,不承诺 Photoshop 逐像素一致。区域重绘包含输出区域外、负坐标及画布外的必要矢量塑形覆盖,不会用文件内旧阴影缓存补画。
// effects 为该图层已有的效果集合,仅修改允许编辑的参数。
err := editor.SetEffectsWithOptions(ctx, id, effects, psdkit.EffectsEditOptions{
ApproximateDropShadow: true,
})
if err != nil {
return err
}
return editor.Save(ctx, "effects.psd", psdkit.SaveOptions{ApproximateDropShadow: true})
阴影近似在编辑、Composite 和保存时分别显式选择,重开后继续编辑也需再次选择。不开启时沿用原来的严格效果范围。活动矢量蒙版与阴影仍限普通 Normal 栅格;智能对象效果不支持活动矢量蒙版,禁用或移除后重新检查当前状态。组效果、剪贴、Blend If、Knockout 或通道限制仍拒绝。未羽化组合保持已有受支持路径;包含矢量羽化时只开放上述矩形范围。来源、参数、预算或取消验证失败时不会提交部分效果更新。
智能对象当前来源与效果
SetEffectsWithOptions 的纯阴影与阴影+颜色叠加会先从当前 SoLd/SoLE、来源字节和变换重绘;共享来源替换后使用新内容,各实例的效果参数保持独立。ApproximateDropShadow 选择整个阴影/叠加组合模型;纯智能对象颜色叠加的场景重绘仍使用原 ApproximatePlacedColorOverlay,此项没有增加其单独参数编辑接口。
效果、父层像素蒙版、Fill 和 Opacity 留在后续合成,原始投影缓存不烘焙这些状态。阴影需要的来源范围按当前效果重算,包含输出区域外和画布外的来源;只持有文件内旧栅格的图层不能通过实时效果资格检查。参数与未着色源像素原子提交,字体/外链回调在锁外执行;取消、来源失败、预算不足或回调期间另有编辑都不提交候选。
EffectsEditOptions.Render 提供本次编辑的来源解析器及策略,缺省只允许严格嵌入来源和已有严格智能滤镜子集。父层 ApproximateDropShadow 不会复制到 Render.Compose 的递归来源;来源滤镜、投影、Warp 或文字近似须分别显式选择,字体和外链也仍须显式提供。
自动 Composite/保存会再次严格重建当前嵌入来源,包括当前替换和滤镜参数,不沿用上次编辑的 Render。因此完整自动保存闭环限于可严格重建的嵌入来源:外链先用 EmbedLinkedContentsWithOptions 显式转嵌入,或在保存时提供准确的 CompositeImage/Composite;需要额外来源近似或字体的情况也须提供准确合成图。未映射外链不会静默读取路径或回退旧缓存。PSD/PSB 四压缩的编辑、来源替换、保存重开续编,以及原生 JSON/真实 Wasm 都已验证;其余放置组合仍按范围拒绝。
已知效果的不透明度为 0 时,可保留合法的 Noise/Jitter(0–100%),无需执行噪点采样。可用 SetEffects 将已有噪点效果的不透明度改为 0,随后实时重绘、自动保存和重开;恢复非零不透明度仍拒绝。未知字段、重复或错误单位的 Opacity、非法参数及其他效果限制不会因不透明度为 0 而放行。
当效果集合的主开关或文档效果可见性明确关闭,且集合级语义无歧义时,原本受支持的 pass-through 组 Blend If 可与其共存,覆盖组自身和子图层上的关闭效果。保存保留效果块,重新启用后仍检查活动组合;仅关闭个别效果或将其不透明度设为 0 不会扩展这项组能力。
调整图层
adjusted, err := psdadjust.Apply(ctx, pixels, adjustment)
if err != nil {
return err
}
| 能力 | 入口 |
|---|---|
| 解析 / 编辑 | source.DecodeAdjustment、Editor.SetAdjustment |
| 执行 | psdadjust.Apply、psdadjust.Compile |
| 支持类型 | Invert、Threshold、Posterize、Levels、Curves、Exposure、受控 Channel Mixer |
- PhotoFilter:支持参数读写,密度为 0 时恒等渲染;非零密度的实时路径仍拒绝。
- Color Balance / 旧版 RGB BrightnessContrast:支持已知参数编辑和保存;非中性值的实时重绘仍拒绝,保存时须提供准确的
Composite或CompositeImage。中性参数支持恒等渲染。 - Curves:256 项查找表支持任意映射,包括非单调值;非单调控制点曲线的插值仍不支持。
- Hue/Saturation:RGB8 的纯 Master Lightness 默认支持,范围为 -100 至 100 的整数;要求
Colorize=false、Master Hue/Saturation 为 0、六个局部调整值均为 0。SetAdjustment编辑后可直接实时重绘、自动保存和重新打开,不需要提供替代合成图。Hue、Saturation、局部调整和 Colorize 仍须通过ApproximateHueSaturation显式开启近似。
纯明度回归覆盖全部 201 个整数控制的原生灰阶结果;彩色与透明像素的独立对照存在最多 1 字节差异,复杂前置混合不承诺逐像素一致。
矢量与填充
| 能力 | 入口 |
|---|---|
| 矢量路径 | source.DecodeVectorMask / DecodePath,psdvector.Rasterize,EncodeVectorMask |
| 纯色 | Editor.SetSolidFill |
| 渐变 | source.DecodeGradientFill、psdgradient.Render(Classic 渐变)、Editor.SetGradientFill |
| 图案 | source.DecodePatternFill / DecodePattern、psdpattern.Render、Editor.SetPatternFill / SetPatternFillWithOptions |
| 矢量蒙版编辑 | Editor.AddVectorMask / SetVectorMask / RemoveVectorMask,生命周期限制见图层编辑 |
psdvector 保留 typed 路径、未知记录和受控编码,提供有限光栅化;描边近似通过 ApproximateVectorStroke 显式开启。尚未完成:全部组合、描边、羽化与采样精度。
普通 Normal 栅格层上的单个整数矩形矢量蒙版,支持 .5 / 1.5 / 3 像素羽化;可与纯颜色叠加及已禁用的像素蒙版共存。活动双蒙版羽化只在上述显式近似阴影/阴影+颜色叠加范围内开放,纯颜色叠加单独使用仍拒绝该组合;已有样本与参数保留。
恒定 Classic 渐变
当全部颜色停止点的 RGB 完全相同、全部透明度停止点的值完全相同时,Linear / Radial Classic 渐变可直接重绘为常值色场;没有透明度停止点时视为完全不透明。这一子集支持非默认 Smoothness、同值重叠停止点、端点 Midpoint,以及 1×1 或极小缩放的退化几何,保存保留原始渐变描述符。
所有字段仍须合法、有限且满足预算。Dither、未知形状或插值方式继续拒绝;不再恒定的分量仍遵守原有采样限制。支持 SetGradientFill 编辑、自动保存、重开与继续编辑。
只有颜色恒定、透明度仍变化时,也允许颜色组中的重复同值停止点和端点 Midpoint;透明度组仍按原有算法采样。只有透明度恒定时同理。只要仍有变化分量,就继续要求 Smoothness=4096 和有效几何;不会用常量分量绕过另一分量的采样限制。
图案参数与准确图层像素
SetPatternFill 的自动采样范围为唯一的本地 RGB8 图案、50 / 100 / 200% 缩放、整圈角度(0、±360、±720 等)和整数相位。保存保留请求的原始角度值;接近整圈但不相等的角度、90/180/270° 仍不在实时范围内。
实际本地图案为 1×1 像素时,周期采样恒定,SetPatternFill 额外支持任意有限正缩放、有限角度及有限相位(含小数相位)。结果保留唯一像素的 RGBA,包括透明像素下的隐藏 RGB;保存不会简化图案块或改写请求参数。切换到更大的图案时立即恢复上述采样限制,参数也必须能被原描述符精确表示。此扩展不放宽 WithOptions 提供准确像素时的原有整数相位规则。
来源的缩放、角度或小数相位暂不支持重绘时,只要参数布局明确且本地图案有效,也可直接改成上述支持范围内的目标值。例如将 75%、37°、0.5 像素相位改成 100%、0°、整数相位,即可自动重绘并保存,无需提供 Pixels。
SetPatternFillWithOptions(ctx, id, &fill, options) 可同时提供 PatternFillEditOptions{Pixels: accuratePixels},从而保存其他正有限缩放和有限角度的已知参数。目标相位仍须为整数且绝对值不超过 1<<40,未知 PtFl 布局和不明确的本地图案引用会被拒绝。
Pixels 必须与当前图层 Bounds 完全一致,是图层不透明度、蒙版和效果之前的 straight-alpha RGB8 像素。库独立复制它,保留本地图案原字节及无关元数据;不检查画面是否符合 Photoshop 采样算法。
这个入口只扩展参数与准确缓存的编辑保存范围。未支持的缩放/角度仍无法 Composite 或自动生成保存预览;调用方须通过 SaveOptions.Composite / CompositeImage 提供准确的完整合成图。省略 Pixels 时与 SetPatternFill 的严格范围相同。
[!TIP] 在 Playground 的“图层效果与调整”和“矢量与填充”分组里,可以对导入的 PSD 直接调用这些解析入口,查看真实返回的参数结构。