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

Colors 使用Imagemagick将图像处理为“;默认调色板";(例如16或256色),colors,imagemagick,Colors,Imagemagick,目前,我正在处理图像以从中提取主要颜色,方法如下: -resize '50x50' -colors '8' -colorspace 'RGB' -quantize 'RGB' '/tmp/downsampled20190502-27373-iqgqom.png' 然而,它返回了我很多颜色,所以我不得不将它们限制在主调色板上(比如白色/黑色/红色/等等),所以我想8或16种颜色对我来说就足够了 我认为-colors'8'应该处理它,但是,它只从图像返回原色8 您对我如何提取颜色并将其转换为3位(

目前,我正在处理图像以从中提取主要颜色,方法如下:

-resize '50x50' -colors '8' -colorspace 'RGB' -quantize 'RGB' '/tmp/downsampled20190502-27373-iqgqom.png'
然而,它返回了我很多颜色,所以我不得不将它们限制在主调色板上(比如白色/黑色/红色/等等),所以我想8或16种颜色对我来说就足够了

我认为
-colors'8'
应该处理它,但是,它只从图像返回原色8

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


我想把它转换成GIF,但是GIF包含256个调色板。

我想你应该把所有颜色映射到8个“原色”中的一个。因此,让我们制作一个可接受颜色的调色板:

convert xc:red xc:lime xc:blue xc:cyan xc:magenta xc:yellow xc:white xc:black +append palette.gif
放大并查看(因为目前它只有8x1像素):

现在拿这个
色轮

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

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

现在使用抖动重新映射

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

我不明白这里发生了什么。您正在运行哪个版本的ImageMagick-请尝试
identify-version
。此外,这可能会产生1000000种不同的颜色,但结果我只得到8种-你能试试吗
convert-size 1000x1000 xc:red+noise random-colors 8 result.png
使用
identification-format%k result.png
计算颜色。你的意思是你拥有或想要创建一个个人调色板并将其应用于大量图像吗?你可以列出你想要使用的颜色。然后将其制作成彩色地图图像。然后使用-remap将像素重新指定为最接近的颜色,从而强制图像仅具有这些颜色。例如谷歌的标志,我想有一个像:(蓝-红-黄-绿)而不是半彩色的开始提取颜色!然后我怎么才能从图像中提取存在的颜色呢?我的意思是,
colorwheel
没有黑白,因此,我需要一个除它们之外的所有颜色的列表我已经更新了答案顶部显示了如何列出颜色名称和十六进制值-注意,ImageMagick使用SVG colorname
Lame
,在您可能期望的
green
。您知道如何将其转换为256种颜色吗?我需要手动创建调色板吗?或者有一些内置的解决方案?这取决于你想做什么,但你还没有在评论区回答我的问题。是否始终要将图像转换为一组固定的N种颜色,这些颜色始终是相同的N种颜色?如果没有,您实际上想做什么?是的,我想始终转换为特定数量的颜色
convert colorwheel.png-type palete-depth 1-colors 8-unique colors txt:
看起来这正是我需要的,谢谢!