关于算法:合成图层样式

Compositing layer styles

我正在尝试从 Adob??e Photoshop 实现"内阴影"样式。

我有 3 个 RGBA 层:源层(棕色)、内阴影层(白色)和背景层。它们可以具有类似 Photoshop 的混合模式(正常、正片叠底、颜色加深...) - 混合不是关联的!

我想将它们混合在一起,就像 Photoshop 中的图层样式一样。当我将阴影 alpha 乘以源 alpha 并混合(阴影覆盖(源覆盖背景))时,我在对象周围得到了深色轮廓,其中源 alpha 介于 0 和 1 之间。

Photoshop 参考在左边,我的结果在右边。

></p>
<p>


我在 PDF 格式 1.7 规范的第 339 页找到了这个问题的答案。

所以,合成(阴影与(源与背景))是错误的。正确的做法是:

  • 将源与背景合成到临时通道 C 中,忽略源的 alpha 并在任何地方使用 1.0 的 alpha 值。

  • 以标准方式将(未裁剪的)阴影与 C 合成到 C 中。

  • 使用源 alpha 计算 C 与背景的加权平均值
    作为权重因子。

  • 如您所见,阴影与源和背景混合在一起。加权平均是我正在寻找的函数。