侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   211

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

原有处理方式

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


采用 hex 函数手动转换色值

动机

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

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

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

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

开干

1.首先我需要输入函数

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

#!/usr/bin/python#coding=utf-8raw_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/pythonvar1 = 'Hello World!'var2 = "Python Runoob"print "var1[0]: ", var1[0]print "var2[1:5]: ", var2[1:5]这个范例的执行结果:var1[0]: Hvar2[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-8input = 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. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。

总结

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


  • 上一条:
    Python中断言Assertion的一些改进方案
    下一条:
    Python实现批量检测HTTP服务的状态
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客