使用imagemagick中的颜色列表重新映射/后处理图像颜色

使用imagemagick中的颜色列表重新映射/后处理图像颜色,image,imagemagick,rmagick,dragonfly-gem,Image,Imagemagick,Rmagick,Dragonfly Gem,假设我有这样一个图像: 我想把颜色的数量减少到3,就像这样: 为此,我应用了以下命令: convert orange.jpg-remap palete.png orange\u output.png 其中palete.png如下所示: 有没有一种方法可以在不使用调色板图像的情况下执行此转换?理想情况下,我想提供一个颜色列表,并让它以这种方式转换图像 有没有一种方法可以在不使用调色板图像的情况下执行此转换 是的,但这并不像提供调色板那么容易。在一个非常高的层次上,您可以通过应用,甚至调整来预

假设我有这样一个图像:

我想把颜色的数量减少到3,就像这样:

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

convert orange.jpg-remap palete.png orange\u output.png

其中palete.png如下所示:

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

有没有一种方法可以在不使用调色板图像的情况下执行此转换

是的,但这并不像提供调色板那么容易。在一个非常高的层次上,您可以通过应用,甚至调整来预处理源图像。之后,更换颜色将是一个简单的操作

convert source.jpg-colors 3-treedepth 3-dither FloydSteinberg+remap out.png

省略替换示例

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

convert-size 1x1 xc:green xc:orange xc:blue-append txt:-|\
convert source.jpg-remap txt:-out.png

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

# 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
你可以把它减少到

# ImageMagick pixel enumeration: 1,3,255,rgb
0,0: #008000  green
0,1: #FFA500  orange
0,2: #0000FF  blue

convert-size 1x1 xc:#ffffff-append colors.png
创建具有黑色像素而非白色像素的1x1图像。我使用的是ImageMagick 7.0.7-22我发现:ImageMagick喜欢做过早的优化,所以它将单像素白色图像优化为二进制PNG。要强制IM输出sRGB png,请运行
convert-size 1x1 xc:#ffffff-append-define png:color type=6 colors.png