从imagemagick中仅获取十六进制值

时间:2018-01-17 11:59:06

标签: imagemagick

我可以使用此命令从图像中获取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的情况下获取十六进制值?

谢谢

2 个答案:

答案 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

我添加了颜色名称以便澄清 - 它们实际上并没有完成。