利用Python实现颜色色值转换的小工具
作者:张瑞Jerrysher 发布时间:2021-09-12 07:44:15
先看看Zeplin 的颜色色值显示示例
原有处理方式
因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex()
函数把十进制转换成十六进制),所以遇到这样的问题我当然是采用python 的 hex()
函数做转换,然后手动结果输入到 Android Studio 中。
采用 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开始的字符串。
于是就有了第一个版本。
第一个版本
第一个版本执行结果
写出这样的基础版本已经基本可以得到我想要的结果了,缺点是还需要我手动收入,动用大脑记忆十六进制色值然后输入。希望可以直接复制最后结果。
再进一步
虽然结果已经出来了,但是还是希望可以在进步一些,有几个问题:
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:] 的裁剪就可以了。
倒向裁剪字符串引起的bug
还可以继续升级体验:
a. 直接在终端中输入 colorU 231 234 123
就可以得到结果 #e7ea7b;
b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。
c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。
总结


猜你喜欢
- 本文实例讲述了Sanic框架应用部署方法。分享给大家供大家参考,具体如下:简介Sanic是一个类似Flask的Python 3.5+ Web
- <!--#include file="conn/conn.asp"--> <% set Newslis
- 简介本文主要介绍python数组循环语法。主要方式有元素遍历,索引遍历,enumerate, zip, list内部等。普通循环list1
- 一.图像灰度线性变换原理图像的灰度线性变换是通过建立灰度映射来调整原始图像的灰度,从而改善图像的质量,凸显图像的细节,提高图像的对比度。灰度
- 近日一直在折腾vps ,刚刚碰到在搬移wordpress过程中导入数据库的时候。碰到了 #1062 – Duplicate entry
- Python中类似于PHP的数组的结构有list,tuple,dict和set, 其中list, tuple和set的类似于PHP的索引数组
- 首先要解释一下:“极致之美”不是说月儿的这篇文章,因为本人还没有自大到这种程度:P,它形容的是Lisp和javascript结合的优美形态。
- Golang 是一种简洁高效的编程语言,拥有强大的并发支持和丰富的标准库。在 Golang 中,计时器(timer)是一种常见的工具,用于定
- 文章所罗列的问题虽然看似简单,但是每个背后都涵盖了一个或几个大家容易忽视的基础知识点,希望能够帮助到你的面试和平时工作。Q1第一个问题关于弱
- 前言本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看“诡异”的一幕,执行Updat
- 0. 简介上篇博客介绍了goroutine的创建、执行和退出的过程,并且提及了在协程切换时涉及的调度循环,本篇博客我们就来探究一下其他情形引
- Git修改已提交的commit注释两种情况:修改最后一次注释1、在命令行输入如下命令,然后回车:git commit --amend2、在命
- 初步介绍 当然,我知道现在有成千上万个关于 用CSS处理圆角 的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常
- 当前,数据可视化已经成为数据科学领域非常重要的一部分。不同网络系统中产生的数据,都需要经过适当的可视化处理,以便更好的呈现给用户读取和分析。
- 不过由于手机的参数多,且不同的手机其参数差异大,所以参数表结构通常是纵表(一个参数是一行),而不是横表(一个参数是一列),此时使用若干参数来
- 本文为大家分享了mysql 8.0.15 安装配置方法,供大家参考,具体内容如下1.安装完成后在安装根目录下做一个my.ini文件my.in
- 在深度学习中,经常需要动态调整学习率,以达到更好地训练效果,本文纪录在pytorch中的实现方法,其优化器实例为SGD优化器,其他如Adam
- 今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查
- 现在视频号非常火热,之前在做抖音和快手的人就直接把之前的视频直接搬运过来了。但是从抖音app下载的视频都是带官方水印的?这个是怎么去掉的?哦
- 一、理论知识准备1.确定假设函数 如:y=2x+7 其中,(x,y)是一组数据,设共有m个2.误差cost 用平方误差代价函数 3.减小误差