使用ImageMagick中的颜色列表重新映射/海报化图像颜色

4

假设我有这张图片:

橙子

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

enter image description here

为了实现这个目的,我使用了以下命令:

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

其中palette.png如下所示: enter image description here

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

1个回答

5

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

有,但它不像提供一个颜色调色板那么容易。在非常高的层次上,您将通过应用抖动, 丢弃颜色,甚至可能调整树深度来预处理源图像。之后,替换颜色就是简单的操作。

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

Pre-process without colorswap

省略 -绘制颜色 替换示例

但我想你真正想要一个简单的一行代码。幸运的是,remap接受文本格式和管道符。

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

Remapped colors

文本格式非常简单,可以使用任何脚本语言动态创建和存储。
# 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版本。 - the21st
我找到了解决方法:ImageMagick 喜欢进行过早的优化,因此将单像素白色图像优化为二进制 PNG。要强制 IM 输出 sRGB png,请运行 convert -size 1x1 xc:#ffffff -append -define png:color-type=6 colors.png - the21st

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接