怎么做一个设计师网站,营销策划机构,电子商务类网站建设实训报告,做求职网站需求说明
公司的 UI 设计小哥#xff0c;已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的#xff0c;在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果#x…需求说明
公司的 UI 设计小哥已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果所以我需要一个工具输入十进制的 RGB 得到十六进制的色值最好可以方便复制。Zeplin 的颜色色值显示示例
原有处理方式
因为我会 Python 仅限于终端输入 python 然后当做计算器算或者用 hex() 函数把十进制转换成十六进制所以遇到这样的问题我当然是采用python 的 hex() 函数做转换然后手动结果输入到 Android Studio 中。采用 hex 函数手动转换色值
动机
人总是懒得想要写这个小工具已经很久了我也打过有过构思就是
输入: 类似 RGB 的十进制值(110, 122 138)用空格或者逗号分割一下。
输出: 一个十六进制的 RGB 颜色色值(#6e7a8a)。
但就一直没动手一直讲究着。真懒
开干
1.首先我需要输入函数
我打开我之前学习 Python 的文件夹里面正好有一个 raw_input 的示例
Python代码
#!/usr/bin/python
#codingutf-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开始的字符串。
于是就有了版的。
于是就有了第一个版本。
第一个版本第一个版本第一个版本执行结果
写出这样的基础版本已经基本可以得到我想要的结果了缺点是还需要我手动收入动用大脑记忆十六进制色值然后输入。希望可以直接复制最后结果。
再进一步
虽然结果已经出来了但是还是希望可以在进步一些有几个问题
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: # 确定第一个因子
jnum/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
#codingutf-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 colorUpython ~/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:] 的裁剪就可以了。倒向裁剪字符串引起的bug
还可以继续升级体验
a. 直接在终端中输入 colorU 231 234 123 就可以得到结果 #e7ea7b;
b. 配合Alfred 呼出 Alfred 窗口后输入色值得到结果回车直接复制十六进制到粘贴板。
c. 保存之前已经转换过的色值方便重复使用的颜色直接复制十六进制颜色。
本文标题: Python 实现一个颜色色值转换的小工具
本文地址: http://www.cppcns.com/jiaoben/python/172646.html