当前,我正在处理图像,例如:
-resize '50x50' -colors '8' -colorspace 'RGB' -quantize 'RGB' '/tmp/downsampled20190502-27373-iqgqom.png'
但是,它会给我返回很多颜色,因此我必须将它们限制在主调色板(例如白色/黑色/红色/等)中,所以我想8或16种颜色对我来说就足够了。
我认为-colors '8'
应该对其进行处理,但是它只返回图像中的8种原色。
您对我如何提取颜色并将其转换为3位(8色调色板)有任何想法
我虽然将其转换为GIF,但是GIF包含256个调色板。
答案 0 :(得分:1)
我认为您想将所有颜色映射到8种“原色” 中的一种。因此,让我们制作一个可接受的颜色调色板:
convert xc:red xc:lime xc:blue xc:cyan xc:magenta xc:yellow xc:white xc:black +append palette.gif
并放大并查看它(因为目前只有8x1像素):
现在拿这个colorwheel
:
并将所有颜色重新映射到“可接受” 调色板,而无需抖动:
convert colorwheel.png +dither -remap palette.gif result.png
,现在使用抖动重新映射:
convert colorwheel.png -remap palette.gif result.png
您可以制作自己的调色板-不必使用我的颜色,也可以制作任何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