+透明的Imagemagick结果(去除除一种颜色外的所有颜色)会产生颜色残留

问题描述 投票:0回答:1

我生成了图像。它是像素完美的图像(无插值、1 像素=1 颜色、仅 5 种颜色等) 我想将不同文件中的每种颜色分开,因此我使用 ImageMagick CLI 命令来获取唯一颜色,然后使用

+transparent
命令提取。

但结果含有颜色残留。


我实际上使用这个过程从生成的完美像素图像中分离出每种颜色(换句话说,1 个像素、1 个颜色、无插值、无接近颜色等,总共正好 5 种颜色)。 首先,我提取所有独特的颜色:

convert <image.png> -unique-colors txt: > colors.txt

我如预期得到了 5 种颜色的列表。 然后我使用以下命令通过循环脚本分隔唯一文件中的每种颜色:

# #110F12 is one of the colors that could be found in the colors.txt
convert <image.png> +transparent "#110F12" <output.png>

当我使用

sxiv
(简单的 X 图像查看器)打开 output.png 时,我看到一些颜色残留。 但是 如果我用 Gimp 打开它并以 100% 或更高的比例显示图像,我就看不到它们,所以我觉得这没什么。 因为我还需要将提取的颜色填充为纯黑色以供以后使用,所以我首先使用 Gimp 进行如下操作:

  • 我用 Gimp 打开 ImageMagick 生成的文件
  • 我使用 Alt+单击图层来选择颜色(只有一种唯一的颜色,因此它选择所需的像素)
  • 我用黑色填充它
  • 反转选择和 Suppr(因为,即使我没有看到 100% 或更高的颜色残留,在 50% 或更少的情况下,残留也在这里,所以可以肯定的是,我抑制了除颜色选择之外的所有内容)。

因为我想在脚本中执行相同的操作,根本不打开 Gimp,所以我将之前的 ImageMagick 命令修改为:

convert <image.png> +transparent "#110F12" -fill black -opaque "#110F12" <output.png>

但是,如果我用 sxiv 打开两个文件 ImageMagick+Gimp ProcessImageMagick Only,第一个文件 (Gimp) 就不再有颜色残留(即使在 =<50% display), the second one have some white outlines.

这里是

sxiv
上的一些结果截图(sxiv的背景是灰色的,可以清楚地看到残留物,但实际上它是透明的)。第一个带有额外的 Gimp 进程,第二个仅带有 ImageMagick。 即使下载过程中的图像处理显示模糊图像,Gimp one 也具有锐利的边缘/像素,没有颜色残留。然而,ImageMagick 只有一个...

所以,我得出结论,残留物是真实的。但我不知道如何获得与 Gimp 相同的结果,但仅使用 ImageMagick。

这是一个测试样本。该图像恰好包含 5 种颜色(生成的像素完美),其中之一是 #110F12。但图像下载器可能会降低质量,因此如果您测试它,它会变得模糊。

colors imagemagick pixel gimp
1个回答
0
投票

使用 ImageMagick v7,这样的命令会将图像分成单独的图像,每个图像在透明背景上仅具有输入图像的一种颜色...

magick image.png -colors 5 ( +clone -unique-colors ) ^
   +swap -duplicate %[fx:u.w-1] -reverse ^
   +transparent %[pixel:u[-1].p{t,0}] +delete result%02d.png

读取图像,在本例中首先将总颜色减少到 5。在括号内,它会生成图像的克隆,然后使用“-unique-colors”将每个颜色减少为单个像素。这将在命令的下一部分中用作参考图像。

括号后输入图像被复制,为每种颜色制作一个图像。然后“+透明”操作逐步遍历所有图像,并删除除使用“-unique-colors”图像作为参考的颜色之外的所有颜色。

最后删除该参考图像,并输出名为“result00.png、result01.png...等”的 5 个文件

© www.soinside.com 2019 - 2024. All rights reserved.