使用GIMP,您可以“擦除”颜色吗?


9

我目前正在开发iOS应用程序,并且正在尝试对其标准警报对话框窗口进行反向工程。我已经设法通过对纯黑色视图和纯白色视图进行一些颜色采样来找出背景使用的alpha值。

有了这些信息,使用GIMP可以仅“擦除”背景颜色,以便只剩下原始的,未混合的警报背景吗?

我只有图像形式的警报视图作为正在运行的应用程序的屏幕截图。

Answers:


8

是的,有可能。让我以Wikimedia Commons(由ed_g2s许可,授权为CC-By-SA 3.0)中的这张图片为例来概述它的完成方式:

ed_g2s的PNG透明演示图像,许可为CC-By-SA 3.0

  1. 将黑白背景版本打开为同一图像的图层(使用“ 作为图层打开...”,或者只打开两个并将它们复制并粘贴到另一个中)。如果不是这样,请将白色层移到黑色层上方。两层应该看起来像这样:

    演示图像与黑色背景 演示图像与白色背景

  2. 采取不同的层:克隆黑色层(稍后将需要),将白色层的层模式更改为“差异”,然后将其合并。反转结果。这为您提供了原始图像的Alpha通道。

    重建的Alpha通道

    编辑:如果您的背景不是黑白的,则反转的差异层将不会具有黑色背景。要解决此问题,请首先使图层饱和(使用可以提供最佳对比度的任何一种模式),然后使用“ 颜色”→“自动”→“规格化”将背景设为黑色。您也可以改用Channel Mixer,但是使用起来有些麻烦。

    (如果要重新创建的Alpha通道至少某些部分具有100%的不透明度,则上面的Normalize起作用;如果要重新创建的图像到处都是半透明的,则可以使用颜色→色阶...来仅设置黑点。 )

    如果还没有,则还需要创建一个黑色背景的图像版本,用于下一步。为此,请使用以下额外步骤:

    • 选择背景较暗的原始版本。在其顶部创建一个新图层,并填充其背景色。
    • 克隆差异层并重新反转它,使其具有白色背景。将此层放在刚创建的新单色上,将其层模式设置为“ multiply”并向下合并。
    • 最后,将结果图层的模式更改为“减”,然后将其合并到具有原始图像的图层上。这应减去原始背景,使图像留在黑色背景上。
  3. 如果我们使用带有预乘alpha的图像格式,那么现在或多或少就会完成。但是由于不是这样,我们仍然需要对RGB通道进行去乘。为此,请克隆上一步中创建的Alpha层(或仅将其复制到剪贴板),将其层模式设置为“ divide”,然后将其与您在步骤2之前克隆的黑色背景层合并。应该看起来像这样(与原始的黑色背景版本进行比较以了解不同之处):

    解复用的RGB通道

  4. 现在,将图层蒙版添加到生成的图层,选择蒙版并将Alpha图层粘贴到其中。现在,结果应看起来或多或少类似于原始的透明图像。最后,要将遮罩变成正确的Alpha通道,您可以应用它(但是GIMP的PNG导出将为您做到这一点,即使您不这样做)。然后您就可以开始使用了-一个重建的透明PNG准备就绪:

    具有透明度的重建图像

当然,此技术确实要求您在黑色和纯白色背景上都具有图像版本。如果背景有点偏,可能仍然可以使用类似的方法,但是您可能需要进行其他颜色调整,结果可能不尽人意。(编辑:请参见上述步骤2的补充。经修改的说明应适用于任何颜色的背景,只要它们是纯色即可。)


附言 GIMP还具有“颜色擦除”功能(作为“桶填充”工具的混合模式,或作为整个图像的“ 颜色转换为Alpha ... ”),当您只有一个图像版本时,该功能可用于重建透明度在纯色背景上。但是,除非谨慎使用,否则它的确会产生比您可能希望的输出更加透明的输出。

点子 如果您非常仔细地比较原始图像和重建图像,您会发现它们并不完全相同 -一些颜色值偏离了1/256左右。这是因为GIMP的“除法”图层模式是如何工作的:与其计算输出 =(255× input)/ layer的alpha乘法的真逆,它实际上是计算output =(256× input)/(layer+1)。表面上的这种失配是为了避免被零除而完成的,这意味着某些颜色的舍入值可能会与应有的值略有不同。las,除了修补GIMP,编写插件以按我们希望的方式进行划分或使用其他程序外,我对此一无所知。不过,幸运的是,人眼实际上几乎不会察觉到色差。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.