【问题标题】:Subtract Blending Mode减法混合模式
【发布时间】:2021-12-01 15:59:00
【问题描述】:

我一直在尝试将 GIMP (GEGL) 的一些图层混合模式实现到 Python。目前,我陷入了减法混合模式。根据documentationSubtract = max(Background - Foreground, 0)。但是,在 GIMP 中使用Background image = (205,36,50)Foreground image = (125,38,85) 进行简单测试,得到的合成图像/颜色变为(170, 234, 0),这与上面的数学不太相符。

据了解,Subtract 不使用 Alpha 混合。那么,这可能是一个合成问题吗?或者减法遵循不同的数学?更多详细信息和背景可以在单独的SO 问题中找到。

编辑 [2021 年 10 月 14 日]: 我尝试使用this 图像作为我的来源。对[0, 1] 范围内归一化的图像执行以下步骤:

  1. 应用了颜色减淡(之前没有从 sRGB -> linear RGB 完成转换)并从我的实现中获得了与 GIMP 结果匹配的 this
  2. sRGB -> linear RGB 颜色减淡和源图像的转换。 [Reference]
  3. 应用与Background = Colour DodgeForeground = Source Image 的减法混合
  4. 重新转换linear RGB-> sRGB

我从 POC 获得this。左 RGB 三元组:(69,60,34);右 RGB 三元组:(3,0,192)。还有 GIMP result。左 RGB 三元组:(69,60,35);右 RGB 三元组:(4,255,255)

【问题讨论】:

    标签: photoshop gimp blending color-blending gegl


    【解决方案1】:

    如果您正在查看0 ➞ 255 范围内的通道值,它们很可能是经过伽马校正的。操作可能是这样的:

    • 使用类似的方法将每一层转换为0.0 ➞ 1.0 范围内的“线性光”
    L = ((V/255) ** gamma) (*)
    
    • 应用“差异”公式
    • 将结果转换回伽马校正:
    V = (255 * (Diff ** (1/gamma)))
    

    使用gamma=2.2,红色通道获得 170,但我不明白为什么绿色通道获得 234。

    (*) 对于非常低的 IIRC 值,实际公式有一个特殊情况。

    【讨论】:

    • 谢谢。这绝对是 GIMP 内部发生的事情。至于G = 234的值,我一定是搞错了。试图在工具中重现这一点,但不能。但是,当与其他混合选项结合使用时,我仍然面临问题。我的原始帖子已使用此信息进行了更新。你能在这里给点提示吗?
    猜你喜欢
    • 2021-11-08
    • 2016-01-26
    • 2020-01-06
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多