使用Imagemagick将图像处理为“默认调色板”(例如16或256色)

时间:2019-05-02 14:47:37

标签: colors imagemagick

当前,我正在处理图像,例如:

-resize '50x50' -colors '8' -colorspace 'RGB' -quantize 'RGB' '/tmp/downsampled20190502-27373-iqgqom.png'

但是,它会给我返回很多颜色,因此我必须将它们限制在主调色板(例如白色/黑色/红色/等)中,所以我想8或16种颜色对我来说就足够了。

我认为-colors '8'应该对其进行处理,但是它只返回图像中的8种原色。

您对我如何提取颜色并将其转换为3位(8色调色板)有任何想法

我虽然将其转换为GIF,但是GIF包含256个调色板。

1 个答案:

答案 0 :(得分:1)

我认为您想将所有颜色映射到8种“原色” 中的一种。因此,让我们制作一个可接受的颜色调色板:

convert xc:red xc:lime xc:blue xc:cyan xc:magenta xc:yellow xc:white xc:black +append palette.gif

并放大并查看它(因为目前只有8x1像素):

enter image description here

现在拿这个colorwheel

enter image description here

并将所有颜色重新映射到“可接受” 调色板,而无需抖动:

convert colorwheel.png +dither -remap palette.gif result.png

enter image description here

,现在使用抖动重新映射

convert colorwheel.png -remap palette.gif result.png

enter image description here


您可以制作自己的调色板-不必使用我的颜色,也可以制作任何RGB / HSL,您喜欢的十六进制颜色,例如:

convert xc:"rgb(10,20,200)" xc:"#ff7832" xc:"hsl(10,40,90)" +append palette.gif

如果要在生成的图像中使用颜色的名称和十六进制值:

convert result.png -unique-colors txt:

示例输出

# ImageMagick pixel enumeration: 7,1,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (65535,65535,0)  #FFFF00  yellow
3,0: (0,0,65535)  #0000FF  blue
4,0: (65535,0,65535)  #FF00FF  magenta
5,0: (0,65535,65535)  #00FFFF  cyan
6,0: (65535,65535,65535)  #FFFFFF  white