需求说明

公司的 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

#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开始的字符串。

于是就有了版的。

于是就有了第一个版本。

第一个版本

第一个版本

第一个版本执行结果

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

再进一步

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

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:] 的裁剪就可以了。

倒向裁剪字符串引起的bug

还可以继续升级体验:

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

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

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

本文标题: Python 实现一个颜色色值转换的小工具

本文地址: http://www.cppcns.com/jiaoben/python/172646.html

python种颜色循环_Python 实现一个颜色色值转换的小工具相关推荐

  1. python中颜色介意用数字表示_利用Python实现颜色色值转换的小工具

    先看看Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数把十进制转换成十六进制),所以遇到这样的问题我当 ...

  2. python种颜色循环_python – 重置Matplotlib中的颜色循环

    您可以使用Axes.set_color_cycle将颜色循环重置为原始颜色.查看此代码,可以执行实际工作: def set_color_cycle(self, clist=None): if clis ...

  3. 用python3+ PyQt5写一个NFC模块的串口小工具的一星期

    用python3+ PyQt5写一个NFC模块的串口小工具的一星期 原因始于我们的小团队,没有写Windows上位机的人才.自己的[NFC读读写模](https://shop165836966.tao ...

  4. 发布一个实体类属性生成小工具,给开发加点料

    做了很久的代码生成工具,基本上都是基于表生成实体类属性的,把数据库表的信息拿出来,然后之乎者也后生成一个标准的实体类,包含字段.属性.描述等东西. 是基于整个数据库生成整个框架代码的工具,如我的代码生 ...

  5. JS_小工具_自己写了一个画像素画的小工具

    自己抽空做了一个画像素画的小工具,界面比较简单,但也可以画着玩.呵呵. 有意思的地方在于可以把画的内容保存为一个数组,可以很方便地还原成图案... 主要的JS代码: //画板表格 var iconTa ...

  6. python种颜色循环_python图像主色调(主颜色)提取,在hsv空间k均值迭代实现

    #!coding=utf-8fromPIL importImage importrgb2hsv importrandom asran importhsvTRGB frompylab import* # ...

  7. python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结

    Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...

  8. python标记_Python实现一个简单的图片物体标注工具

    # coding: utf-8 """ 物体检测标注小工具 基本思路: 对要标注的图像建立一个窗口循环,然后每次循环的时候对图像进行一次复制, 鼠标在画面上画框的操作.画 ...

  9. python分支与循环_python 条件分支与循环

    一.if判断: 语法一: if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == ' ...

最新文章

  1. Go Time常用语法
  2. 欢乐纪中某B组赛【2019.1.24】
  3. 20.网页卷去的距离与偏移量
  4. 输入图像四通道 输出图像四通道
  5. 94. Ext.MessageBox消息框
  6. 千万要避免的五种程序注释方式
  7. HDU 1407 测试你是否和LTC水平一样高 枚举、二分、hash
  8. java删除文件,重命名文件
  9. macOS官方镜像下载
  10. Windows重装系统后开机Bios有两个启动选项解决办法
  11. Excel表格文件,.xls和.xlsx格式的区别
  12. 爬虫:信息提取的一般方法
  13. Python语言程序设计 - 北京理工大学 网课所有资料(源码,pdf,ppt课件,视频等)
  14. JAVA实现Excel模板填充
  15. Greedy:Cleaning Shifts(POJ 2376)
  16. JZ2440开发板之GPIO实验,遇到的链接语句、设置寄存器的问题
  17. ESXI虚拟机下安装 All in One系统
  18. VR视频播放器 - JW player
  19. 远征日服·信喵之野望 按键精灵脚本4.截卡
  20. 使用阿里云部署Web项目后无法通过浏览器访问

热门文章

  1. 如何使用 dotTrace 来诊断 netcore 应用的性能问题
  2. Istio Pilot 源码分析(一)
  3. .NET Core + Spring Cloud:API 网关
  4. 信创产业发展应不忘初心牢记使命
  5. 你遇到的面试官是「伯乐」吗?
  6. .NET Core 3.0及ASP.NET Core 3.0 前瞻
  7. VS, VS Code, VS Online, VS xxx, 你都分清了吗?
  8. C#并发编程之异步编程(二)
  9. ApplicationInsights的探测器尝鲜
  10. 用StyleCop规范团队代码