我生成了图像。它是像素完美的图像(无插值、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 命令修改为:
convert <image.png> +transparent "#110F12" -fill black -opaque "#110F12" <output.png>
但是,如果我用 sxiv 打开两个文件 ImageMagick+Gimp Process 和 ImageMagick Only,第一个文件 (Gimp) 就不再有颜色残留(即使在 =<50% display), the second one have some white outlines.
这里是
sxiv
上的一些结果截图(sxiv的背景是灰色的,可以清楚地看到残留物,但实际上它是透明的)。第一个带有额外的 Gimp 进程,第二个仅带有 ImageMagick。
即使下载过程中的图像处理显示模糊图像,Gimp one 也具有锐利的边缘/像素,没有颜色残留。然而,ImageMagick 只有一个...
所以,我得出结论,残留物是真实的。但我不知道如何获得与 Gimp 相同的结果,但仅使用 ImageMagick。
这是一个测试样本。该图像恰好包含 5 种颜色(生成的像素完美),其中之一是 #110F12。但图像下载器可能会降低质量,因此如果您测试它,它会变得模糊。
使用 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 个文件