Python 实现一个颜色色值转换的小工具


Posted in Python onDecember 06, 2016

需求说明

公司的 UI 设计小哥,已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果,所以我需要一个工具,输入十进制的 RGB ,得到十六进制的色值,最好可以方便复制。

Python 实现一个颜色色值转换的小工具

 Zeplin 的颜色色值显示示例

原有处理方式

因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数把十进制转换成十六进制),所以遇到这样的问题我当然是采用python 的 hex() 函数做转换,然后手动结果输入到 Android Studio 中。

Python 实现一个颜色色值转换的小工具

采用 hex 函数手动转换色值

动机

人总是懒得,想要写这个小工具已经很久了,我也打过有过构思就是:

输入: 类似 RGB 的十进制值(110, 122 138),用空格或者逗号分割一下。

输出: 一个十六进制的 RGB 颜色色值(#6e7a8a)。

但就一直没动手,一直讲究着。真懒!

开干

1.首先我需要输入函数

我打开我之前学习 Python 的文件夹,里面正好有一个 raw_input 的示例:

Python代码

#!/usr/bin/python 

#coding=utf-8 

 

raw_input("\n\n等输入")

在终端执行 python input.py 后, 可以输入文字。

我需要接受到用户输入的信息。怎么接收忘记了, Google 之,得到结果,顺便改改输入提示语,打印出输入的内容:

Python代码

input = raw_input("\n输入颜色 比如50 144 60:\n") 
print(input)

2. 需要分割字符

查询到python 字符分割函数 split(),默认不传入参数就可以用空白符分割。原本还说用英文逗号(,)作为分隔符,现在看来可以省了,直接用空格分割,无论多少空格都可以自动分割。于是加上代码:

Python代码

rgbColorArray = input.split() 
print(rgbColorArray)

 

3. 需要遍历数组

简单的遍历数组的是怎么弄的也忘记了,同样搜索:

Python代码

for x in rgbColorArray: print(x)

4. 字符转成十六进制

这个时候拿到了字符串,要变成十六进制的字符串。这个时候需要两个函数, int() 和 hex(),int 函数可以将字符串转成 int 类型,而 hex 则接受数字参数,返回字符串。 0x开始的字符串。

于是就有了版的。

于是就有了第一个版本。

第一个版本

Python 实现一个颜色色值转换的小工具

第一个版本

Python 实现一个颜色色值转换的小工具

第一个版本执行结果

写出这样的基础版本已经基本可以得到我想要的结果了,缺点是还需要我手动收入,动用大脑记忆十六进制色值然后输入。希望可以直接复制最后结果。

再进一步

虽然结果已经出来了,但是还是希望可以在进步一些,有几个问题:

1. 当要转换的数字小于16的时候 只有一位不显示,比如11 显示的结果是0xB

2. 现实的结果多了0x

3. 显示的结果最好连在一起方便复制,而不是每个颜色一行。

那么就需要遍历颜色值数组,去掉0x 字符串, 判断小于16的前面补上0。连续在一起输出结果。

for 循环遍历数组

前面用到了 for 循环,是从查到的范例,不过多行就不知道怎么弄了。java 写多了一般都是 { } 大括号括起来。

继续查资料,于是知道是大概下面这样的用法。

Python代码

#!/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, '是一个质数'

变量声明

由于需要不换行,所以就需要字符连接,而不是直接 print。

声明变量又遇到问题了。根据前面的变量使用情况,找了些 python 代码看了看,大概知道不用声明什么类型,直接用就好了。于是有了代码:

Python代码

output = "#" 
for x in rgbColorArray: 
 intx = int(x) 
 output = output + hex(intx) 
print(output)

字符串裁剪和拼接

需要把多余的0x 两位去掉。

用到字符串裁剪,依然寻找范例。

Python代码

#!/usr/bin/python 
 
var1 = 'Hello World!' 
var2 = "Python Runoob" 
 
print "var1[0]: ", var1[0] 
print "var2[1:5]: ", var2[1:5]

这个范例的执行结果:

Python代码

var1[0]: H 
var2[1:5]: ytho

顺便问了旁边也在学习 python 的同事,他告诉我后面的索引可以省略,代表直接裁剪到结尾。

比如上面的例子如果 print "var2[1:]", var2[1:] 得到的结果应该是 ython Runoob

所以有代码:

Python代码

output = "#" 
for x in rgbColorArray: 
 intx = int(x) 
 output = output + hex(intx)[2:] 
print(output)

也可以从后往前数,比如还是上面的范例可以写成。比如上面的例子如果 print "var2[-1:]", var2[-1:] 得到的结果应该是 ob 也就是字符串的后两位。

于是我们这里可以写成hex(intx)[-2:] (因为输出字符串类似是0x23, 这样的)就是这个导致我后面写了个 bug,我也文章最后说明这个 bug 是什么。

if else 判断

接着要做一个判断,给一位的补上0

Python代码

if intx < 16: 
 output = output + '0' + hex(intx)[-2:] 
else: 
 output = output + hex(intx)[-2:]

这样就有了python 文件:

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代码

python colorU.py

或者写全 colorU.py 这个路径。都是很麻的事情,所以我需要把 colorU 加入环境变量中。我用的是 zsh,所以找到环境变量的配置文件:~/.zshrc,末尾加上配置:

Python代码

alias colorU="python ~/Documents/Development/PythonStudy/colorU.py"

这个是经过另外以为同事指导后的最后可行版本,我最初的思路是把 colorU.py 文件设置成可执行文件,然后加入到 Path 当中。结果我把 colorU.py 这个文件的地址加入到了 Path 中,世界上PATH 应该是一个目录。这样添加别名的方式更方便。

也就是说如果我装客户端就可以不用我写的这个脚本了。但没关系我学习了 python,写了我自己的第一个真正有用的 python 代码。

2. 一个bug:我是在写这篇文章的时候才发现这个 bug 的,类似0x33这样的字符串从后往前裁剪的时候写[-2:],当然没有问题,但是写0xf 这样的字符串就会有问题了。程序输入 5 5 5得到的结果是 #0x50x50x5。修改成[2:] 的裁剪就可以了。

Python 实现一个颜色色值转换的小工具

倒向裁剪字符串引起的bug

还可以继续升级体验:

a. 直接在终端中输入 colorU 231 234 123 就可以得到结果 #e7ea7b;

b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。

c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。

Python 相关文章推荐
Python读取mp3中ID3信息的方法
Mar 05 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
python的exec、eval使用分析
Dec 11 Python
Python中一般处理中文的几种方法
Mar 06 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
Python实现寻找回文数字过程解析
Jun 09 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 #Python
python 实现删除文件或文件夹实例详解
Dec 04 #Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 #Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 #Python
Python性能提升之延迟初始化
Dec 04 #Python
python中redis的安装和使用
Dec 04 #Python
Python正则表达式使用范例分享
Dec 04 #Python
You might like
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php自动加载机制的深入分析
2013/06/08 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
python奇偶行分开存储实现代码
2018/03/19 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
flask框架路由常用定义方式总结
2019/07/23 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
联想中国官方商城:Lenovo China
2017/10/18 全球购物
中学生差生评语
2014/01/30 职场文书
护士自我评价
2014/02/01 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
购房意向书范本
2014/04/01 职场文书
中学教师个人总结
2015/02/10 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书