利用Python实现颜色色值转换的小工具
先看看Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 采用 hex 函数手动转换色值 动机 人总是懒得,想要写这个小工具已经很久了,我也打过有过构思就是: 输入: 类似 RGB 的十进制值(110,122 138),用空格或者逗号分割一下。 输出: 一个十六进制的 RGB 颜色色值(#6e7a8a)。 但就一直没动手,一直讲究着。真懒! 开干 1.首先我需要输入函数 我打开我之前学习 Python 的文件夹,里面正好有一个 raw_input 的示例: #!/usr/bin/python #coding=utf-8 raw_input("nn等输入") 在终端执行 我需要接受到用户输入的信息。怎么接收忘记了, Google 之,得到结果,顺便改改输入提示语,打印出输入的内容: input = raw_input("n输入颜色 比如50 144 60:n") print(input) 2. 需要分割字符 查询到python 字符分割函数 rgbColorArray = input.split() print(rgbColorArray) 3. 需要遍历数组 简单的遍历数组的是怎么弄的也忘记了,同样搜索: for x in rgbColorArray: print(x) 4. 字符转成十六进制 这个时候拿到了字符串,要变成十六进制的字符串。这个时候需要两个函数, 于是就有了第一个版本。 第一个版本 第一个版本执行结果 写出这样的基础版本已经基本可以得到我想要的结果了,缺点是还需要我手动收入,动用大脑记忆十六进制色值然后输入。希望可以直接复制最后结果。 再进一步 虽然结果已经出来了,但是还是希望可以在进步一些,有几个问题: 1、当要转换的数字小于16的时候 只有一位不显示,比如11 显示的结果是0xB 2、现实的结果多了0x 3、显示的结果最好连在一起方便复制,而不是每个颜色一行。 那么就需要遍历颜色值数组,去掉0x 字符串, 判断小于16的前面补上0。连续在一起输出结果。 for 循环遍历数组 前面用到了 继续查资料,于是知道是大概下面这样的用法。 #!/usr/bin/python # -*- coding: UTF-8 -*- for num in range(10,20): # 迭代 10 到 20 之间的数字 for i in range(2,num): # 根据因子迭代 if num%i == 0: # 确定第一个因子 j=num/i # 计算第二个因子 print '%d 等于 %d * %d' % (num,i,j) break # 跳出当前循环 else: # 循环的 else 部分 print num,'是一个质数' 变量声明 由于需要不换行,所以就需要字符连接,而不是直接 声明变量又遇到问题了。根据前面的变量使用情况,找了些 python 代码看了看,大概知道不用声明什么类型,直接用就好了。 于是有了代码: output = "#" for x in rgbColorArray: intx = int(x) output = output + hex(intx) print(output) 字符串裁剪 和拼接。 需要把多余的0x 两位去掉。 用到字符串裁剪,依然寻找范例。 #!/usr/bin/python var1 = 'Hello World!' var2 = "Python Runoob" print "var1[0]: ",var1[0] print "var2[1:5]: ",var2[1:5] 这个范例的执行结果: var1[0]: H var2[1:5]: ytho 顺便问了旁边也在学习 python 的同事,他告诉我后面的索引可以省略,代表直接裁剪到结尾。 比如上面的例子如果 所以有代码: output = "#" for x in rgbColorArray: intx = int(x) output = output + hex(intx)[2:] print(output) 也可以从后往前数,比如还是上面的范例可以写成。比如上面的例子如果 于是我们这里可以写成 if else 判断 接着要做一个判断,给一位的补上0 if intx < 16: output = output + '0' + hex(intx)[-2:] else: output = output + hex(intx)[-2:] 这样就有了python 文件: #!/usr/bin/python #coding=utf-8 input = raw_input("n输入颜色 比如50 144 60:n") #print(input) rgbColorArray = input.split() print(rgbColorArray) output = "#" for x in rgbColorArray: intx = int(x) if intx < 16: output = output + '0' + hex(intx)[-2:] else: output = output + hex(intx)[-2:] #print(hex(int(x))) print(output) 还有最后一步:把 ColorU 加入到环境变量中 这个时候我可以得到我要的记过了,但是有点不太方便,我需要到这个 python 文件所在的目录下写 python colorU.py 或者写全 alias colorU="python ~/Documents/Development/PythonStudy/colorU.py" 这个是经过另外以为同事指导后的最后可行版本,我最初的思路是把 后续 后来据说 Zeplin 的客户端可以默认显示十六进制的色值,而我用的是网页版的,所以没有。也就是说如果我装客户端就可以不用我写的这个脚本了。但没关系我学习了 python,写了我自己的第一个真正有用的 python 代码。 一个bug:我是在写这篇文章的时候才发现这个 bug 的,类似0x33这样的字符串从后往前裁剪的时候写[-2:],当然没有问题,但是写0xf 这样的字符串就会有问题了。程序输入 5 5 5得到的结果是 #0x50x50x5。修改成[2:] 的裁剪就可以了。 倒向裁剪字符串引起的bug 还可以继续升级体验: a. 直接在终端中输入 b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。 c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Python:为什么重新定义函数不是错误?有这种功能的hackish
- python queue get size,使用qsize()或len()?
- 为什么heappop时间复杂度在python中是O(logn)(不是O(n))?
- python获取网络时间和本地时间
- 运行“yolk -l”时出现语法错误
- python – 是否可以使用lambda作为字典默认值?
- Python实现遍历目录的方法【测试可用】
- TF-IDF与余弦相似性的应用(一) 自动提取关键词
- Note that only Django core commands are listed as setti
- python – pycurl / curl不遵循CURLOPT_TIMEOUT选项