在GIMP中获取两个图像之间的差异作为透明图像

平面设计 瘸子 透明度
2022-01-04 08:46:28

我有两张图片AB它们在许多地区都很相似。

我想创建一个图像C,以便

B = C on top of A

哪里C应该尽可能透明。on top of是法线层叠加。

C和之间的某种区别A也是如此B如果AB相同,则C完全透明。如果AB非常不同,那么它们C将几乎与 相同B

4个回答

您可以使用“差异”图层模式来创建图层蒙版,并将其应用于 B,如下所示:

  1. 将两个图像作为图层打开,A 在底部,B 在顶部
  2. 在图层的对话框中,将 B 的图层模式标记为“差异”。您现在应该看到图像大部分是黑色的,因为图像是相似的,彩色区域标记了不同的区域。但是,这些颜色与您想要的 B 的颜色不匹配
  3. Edit->Copy visible,得到B上计算效果的副本
  4. 复制 B 层,将其模式改回“正常”(我们称之为 C 层)
  5. 在图层菜单上,为 C 添加一个图层蒙版(图层->蒙版->添加图层蒙版)。
  6. 选择掩码后,粘贴在步骤 3 中复制的内容(编辑->粘贴)。
  7. 将粘贴的内容锚定在图层蒙版上(图层->锚图层)

你在那里 - 使图层 A 和 B 不可见,你应该非常接近你想要的。对图层蒙版的进一步操作(我推荐使用颜色->曲线)可以调整图层 C 上区域的不透明度/透明度。

更新我最近在 Stackoverflow 上回答了一个与此类似的问题, OP 想要以编程方式执行任务(使用 Python + Python-imaging-library) - 我已经发布了关于该问题的完整程序,它可能对任何人都有帮助对这个答案感兴趣。

有一个简单的方法可以做到这一点:

将图像打开为两层,运行过滤器 - 动画 - 优化(差异),您应该得到相同的结果图像,现在由底层和顶部的差异层组成。

仅当您具有部分透明度时,事情才会变得复杂,因为过滤器会将其移除。
这是我为这种情况找到的解决方法:

  • 删除两个图层上的 Alpha 通道(操作在上下文菜单中)

图像将收到白色背景,但不要担心,我们稍后会撤消它。

  • 过滤器 - 动画 - 优化(差异)

现在我们在部分透明的地方有了白色背景的差异层,但我们需要这些像素是透明的,所以我们将采用差异的形状并从原始顶层复制这个形状的图像。确保选择了新生成的差异层并继续:

  • 图层 - 图层到图像大小
  • 编辑 - 复制 (Ctrl+C)
  • 返回原始图像
  • 撤消,撤消以使我们的图层恢复透明度
  • 编辑 - 粘贴为 - 新图层
  • 粘贴的差异层上的 Alpha 到选择(在上下文菜单中)
  • 删除粘贴的差异层
  • 确保选择顶层并从中复制 (Ctrl+C)
  • 现在你有了差异,只需粘贴 (Ctrl+V) 并从中创建一个新层。

当然,没有魔法发生,部分透明的顶层不会改变颜色或降低底层的透明度,所以它只适用于扩展的情况,顶层的改变的像素覆盖了底层。


PS jsbueno 的方法对我不起作用。

GIMP 有一个名为“颜色擦除”的画笔模式。将这个用颜色 X 着色的画笔应用到确定的像素 P1 会创建一个具有较低 Alpha 通道的像素 P2,就像在正常模式下将 P2 与具有颜色 X 的像素混合产生像素 P1 的方式一样。同样的效果,应用到选定的区域或整个图像可以使用“颜色到阿尔法”动作来实现。

画笔模式也可以应用于“克隆工具”。在这种情况下,可以从背景图像 A 的像素中获取颜色并将其应用于结果图像 B 的相应像素。留下的图像是所需的图像 C。

图像 C 的详细创建如下:

  1. 将图像 A 和 B 作为图层(A 低于 B)。
  2. 复制图像 B 并将其命名为 C。将其放在 A 和 B 之间。隐藏图像 B。
  3. 选择“克隆工具”。在“工具选项”窗格中设置以下选项: 模式:“擦除颜色”;画笔:使用锋利的圆形画笔(“硬度 100”) 尺寸:使画笔变大,以便一次轻松绘制所有图像。
  4. 选择 A 层并在左上角的像素上按 CTRL + 以选择要克隆的位置并记住其位置(对于 100% 缩放,它将是 (1,1),对于 50%,它将是 (2,2) 等)。
  5. 现在选择图层 C 并从左上角开始绘画,并在不抬起画笔的情况下覆盖所有图像。图像似乎没有改变。但是,如果您隐藏 A 层,您会看到 C 层现在包含所需的图像。
  6. 检查结果:显示图层 A 和图层 C。切换图层 B 的可见性以确保图像看起来相同。(您也可以为 B 层选择“差异”模式,在这种情况下,您应该得到绝对黑色的图像。)

注意:如果背景图像不透明,则此方法的工作原理与所述相同。在背景图像的透明部分,在 A 顶部混合 C 看起来与图像 B 不同。

我知道这是一个老问题,但以防万一其他人需要一个相对简单的答案。

假设您有以下内容:

  • 图像 (A)
  • 另一张图片 (B) 由第一张图片 (A) 和第三张图片 (C) 组成,您没有单独的文件
  • 需要构建图像 C 的干净副本(可能打开和关闭覆盖)

在 Gimp v2.10.18 中执行以下操作:

  • 文件>打开...组合图像B(这应该显示为单层)
  • 文件>作为图层打开...图像A(没有图像C覆盖)
  • 在“图层”面板中,选择包含第二张图像的图层
  • 层 > 堆栈 > 层到顶部
  • 在图层面板中,右键单击顶层 > 编辑图层属性...
  • 将模式设置为“颜色擦除”,然后单击“确定”

由于在与图像 A 组合之前,我们没有关于图像 C 在每个像素中具有什么内容的明确记录,因此我们无法确定图像 A 和 C(如果有的话)中哪些像素具有相同的内容。因此,这项技术留给我们的是图像 C 的清晰版本,其中两幅图像的像素数据相等(如果有的话)。

使用这种技术,我能够在给定图像和相同图像的情况下创建原始的文本覆盖再现,并为图像中的特征添加覆盖标签。