使用 imagemagick 中的颜色列表重新映射/分离图像颜色

Ric*_*ick 5 image rmagick imagemagick dragonfly-gem

假设我有这个图像:

橙子

我想将颜色数量减少到 3 种,如下所示:

在此输入图像描述

为此,我应用了以下命令:

convert orange.jpg -remap palette.png orange_output.png

其中palette.png 看起来像这样: 在此输入图像描述

有没有办法在不使用调色板图像的情况下执行此转换?理想情况下,我想提供一个颜色列表并让它以这种方式转换图像。

emc*_*lle 6

有没有办法在不使用调色板图像的情况下执行此转换?

是的,但这并不像提供调色板那么容易。在非常高的水平上,您可以通过应用抖动丢弃颜色甚至调整树深度来预处理源图像。之后就是简单的更换颜色的操作了。

convert source.jpg -colors 3 -treedepth 3 -dither FloydSteinberg +remap out.png
Run Code Online (Sandbox Code Playgroud)

没有颜色交换的预处理

省略-draw color替换示例

但我想你真的想要一个简单的单线。幸运的是,重新映射接受文本:格式和管道

convert -size 1x1 xc:green xc:orange xc:blue -append txt:- | \
        convert source.jpg -remap txt:- out.png
Run Code Online (Sandbox Code Playgroud)

重新映射颜色

文本格式非常简单,可以使用任何脚本语言动态创建和存储。

# ImageMagick pixel enumeration: 1,3,65535,srgb
0,0: (0%,50.1961%,0%)  #000080800000  green
0,1: (100%,64.7059%,0%)  #FFFFA5A50000  orange
0,2: (0%,0%,100%)  #00000000FFFF  blue
Run Code Online (Sandbox Code Playgroud)

您可能可以将其减少到...

# ImageMagick pixel enumeration: 1,3,255,rgb
0,0: #008000  green
0,1: #FFA500  orange
0,2: #0000FF  blue
Run Code Online (Sandbox Code Playgroud)