利用Python实现颜色色值转换的小工具


Posted in Python onOctober 27, 2016

先看看Zeplin 的颜色色值显示示例

利用Python实现颜色色值转换的小工具

原有处理方式

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

利用Python实现颜色色值转换的小工具
采用 hex 函数手动转换色值

动机

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

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

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

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

开干

1.首先我需要输入函数

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

#!/usr/bin/python
#coding=utf-8

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

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

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

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

2. 需要分割字符

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

rgbColorArray = input.split()
print(rgbColorArray)

3. 需要遍历数组

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

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 写多了一般都是 { } 大括号括起来。

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

#!/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 代码看了看,大概知道不用声明什么类型,直接用就好了。

于是有了代码:

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 的同事,他告诉我后面的索引可以省略,代表直接裁剪到结尾。

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

所以有代码:

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

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

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

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

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

后续

后来据说 Zeplin 的客户端可以默认显示十六进制的色值,而我用的是网页版的,所以没有。也就是说如果我装客户端就可以不用我写的这个脚本了。但没关系我学习了 python,写了我自己的第一个真正有用的 python 代码。

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

利用Python实现颜色色值转换的小工具
倒向裁剪字符串引起的bug

还可以继续升级体验:

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

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
Python+微信接口实现运维报警
Aug 27 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python实现图片批量压缩程序
Jul 23 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Django密码存储策略分析
Jan 09 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
Python实现批量检测HTTP服务的状态
Oct 27 #Python
python解决网站的反爬虫策略总结
Oct 26 #Python
Python控制多进程与多线程并发数总结
Oct 26 #Python
Python网络爬虫项目:内容提取器的定义
Oct 25 #Python
Python实现ssh批量登录并执行命令
Oct 25 #Python
详解Python的Lambda函数与排序
Oct 25 #Python
Python脚本实现Web漏洞扫描工具
Oct 25 #Python
You might like
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Python with的用法
2014/08/22 Python
python实现telnet客户端的方法
2015/04/15 Python
python处理大数字的方法
2015/05/27 Python
python函数形参用法实例分析
2015/08/04 Python
Python中functools模块的常用函数解析
2016/06/30 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
基于python中__add__函数的用法
2019/11/25 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
文明上网主题班会
2015/08/14 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python