我可以使用此命令从图像中获取10种最常用的颜色
convert MYIMAG.JPG +dither -colors 10 -unique-colors
输出如下:
# ImageMagick pixel enumeration: 10,1,65535,srgb
0,0: (17797.7,15058.3,10214.1) #453B28 srgb(69,59,40)
1,0: (26745.1,24530.8,20814.7) #685F51 srgb(104,95,81)
2,0: (35510.4,30224.2,23717.1) #8A765C srgb(138,118,92)
3,0: (33428.3,32608.7,27562.4) #827F6B srgb(130,127,107)
4,0: (42221,36875.3,29255.8) #A48F72 srgb(164,143,114)
5,0: (53896.7,44085.9,24988.3) #D2AC61 srgb(210,172,97)
6,0: (45384.3,42509,38801.6) #B1A597 srgb(177,165,151)
7,0: (54519.7,46803.7,37705.7) #D4B693 srgb(212,182,147)
8,0: (56368.6,48645.3,40350) #DBBD9D srgb(219,189,157)
9,0: (58605,50733.4,41256.9) #E4C5A1 srgb(228,197,161)
现在我想转换它,或者只是按照以下格式获取它:
#453B28
#685F51
#8A765C
#827F6B
#A48F72
#D2AC61
#B1A597
#D4B693
#DBBD9D
#E4C5A1
有没有办法在没有Rest的情况下获取十六进制值?
谢谢
答案 0 :(得分:1)
convert ... | tail -n +2 | awk '{ print $3 }'
使用tail
跳过不需要的第一行输出。
然后使用简单的awk
程序来保留第3列。
答案 1 :(得分:0)
如果你只有10种颜色。你可能已经准备好忍受这种尴尬:
convert -size 10x1 gradient: -depth 8 -format "%[hex:p{0,0}]\n%[hex:p{1,0}]\n%[hex:p{2,0}]\n%[hex:p{3,0}]\n%[hex:p{4,0}]\n%[hex:p{5,0}]\n%[hex:p{6,0}]\n%[hex:p{7,0}]\n%[hex:p{8,0}]\n%[hex:p{9,0}]\n" info:
FFFFFF
E3E3E3
C6C6C6
AAAAAA
8E8E8E
717171
555555
393939
1C1C1C
000000
除此之外,我不知道你问的本地方式,乔纳森的方法和任何方法一样好。另一种选择可能是这样的,我创建一个带有红色,绿色,蓝色和白色像素的小图像,然后将其转储为RGB并使用xxd
将其格式化为3列,用于R,G,B: / p>
convert xc:red xc:lime xc:blue xc:white +append -depth 8 rgb: | xxd -p -c3
ff0000 # red
00ff00 # green
0000ff # blue
ffffff # white
我添加了颜色名称以便澄清 - 它们实际上并没有完成。