Pulpcode

捕获,搅碎,拼接,吞咽

0%

我想要的RGB

今天本来是在用pygame写一个演示程序,经常会用到一些rgb值,比如:

1
2
3
4
5
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
# ........
# other colors
# .......

其实每个颜色就是一个元组,如果我把它们全写在一个叫mycolor.py的文件中,那我就可以在别的python代码中直接使用,很方便。可惜网上并没有现成的东西….

自己动手吧,开工。当然不能一个一个手工输入啦,要不白学程序了。
我在网上找到了如下的数据:

( 这个RGB数据文件很长,所以 以下的 例子都是从中截取一段用来解释 )

XXXXX  #F08080     LightCoral     淡珊瑚色
XXXXX  #BC8F8F     RosyBrown     玫瑰棕色
XXXXX  #CD5C5C     IndianRed     印度红
XXXXX  #FF0000     Red     纯红
XXXXX  #A52A2A     Brown     棕色

最前面的XXXXX什么都不是,所以我vim下用一个宏解决 掉
先 把光标移动到第一行的第一个字符出

录制宏

@qa
dt#j
q

这个宏的意思就是删出#前的所有数据,然后光标下移,

之后对所有行执行这个宏就行了。

现在的文件是这个样子,我们把它 命名 为source

:cat source

#F08080     LightCoral     淡珊瑚色
#BC8F8F     RosyBrown     玫瑰棕色
#CD5C5C     IndianRed     印度红
#FF0000     Red     纯红
#A52A2A     Brown     棕色

之后我用linux的cut命令

cut -f 1 source > rgb_0x
cut -f 2 source > en
cut -f 3 source > cn

这样我就又多了三个文件, 分别如下:

:cat rgb_0x

#F08080
#BC8F8F
#CD5C5C
#FF0000
#A52A2A

:cat en:
LightCoral
RosyBrown
IndianRed
Red
Brown

:cat cn:
淡珊瑚色
玫瑰棕色
印度红
纯红
棕色

之所以这样,是为了使程序更加灵活,我们可以将这三个文件随意搭配,如果你学过unix和linux,你就能体会到这种思想,用这种放式组织程序和数据,而不是一个交互式程序,提示用户输入….

现在我们先来把十六进制的rgb转换成我们想要的格式:

#FF0000 =======>  (255, 0, 0)

我用python写了一个脚本来完成这个任务getrgb.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
infile = 'rgb_0x'
outfile = 'rgb'

# get rgblist like ['FF', '00', '00']
def process(rgbstr):
s = rgbstr.srtip()
s = s.replace('#','')
return [s[i:i+2] for i in range(0, len(s),2)]

# read file

fin = open(infile)

# get list like ['255', '255', '255']
rgblist = []
for line in fin.readlines():
stlist = process(line)
intst = [ '%d'%int(i,16) for i in stlist]
rgblist.append(','.join(st))

# add parenthese
parlist = []

for i in rgblist:
parlist.append('(' + i + ')\n')

# write file
fout = open(outfile, 'w')
fout.writelines(parlist)

fin.close()
fout.close()

运行这个脚本,得到了一个rgb文件

(255,255,255)
(245,245,245)
(220,220,220)
(211,211,211)

接下来一个命令得到我想要得:

paste -d "=" en rgb > mycolor.py

paste 用来链接两个文件,当然,用sed也可以完成这个工作 ,不过杀鸡焉用牛刀。

DarkMagenta =(139,0,139)
Purple =(128,0,128)
MediumOrchid =(186,85,211)
DarkViolet =(148,0,211)
DarkOrchid =(153,50,204)

看上去很不整齐,所以我用vim打开

输入:Tab /=

MediumOrchid = (186,85,211)
DarkViolet   = (148,0,211)
DarkOrchid   = (153,50,204)
Indigo       = (75,0,130)

这是一个叫Tabular的vim插件,用来对齐,对于写代码的vim用户很有用。

当然我们还可以用sed在给每行加一个中文注释,(如果你英语很好,认识这些颜色的名字,就不用了)
像这样:

MediumOrchid = (186,85,211) # 中兰花紫
DarkViolet   = (148,0,211)  # 暗紫罗兰
DarkOrchid   = (153,50,204) # 暗兰花紫

也可以用sed写一个简单的渲染,

把这些数据渲染成一个html页面,这样颜色在html页面上能直接显示了,方便查阅,

现在你明白为什么我要把source cut成三段了吧?