先看看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. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。

总结

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

希望与广大网友互动??

点此进行留言吧!

python中颜色介意用数字表示_利用Python实现颜色色值转换的小工具相关推荐

  1. 在python中股票的收盘价如何表示_利用python计算股票涨跌幅

    作为一个python新手,在学习中遇到很多问题,要善于运用各种方法.今天,在学习中,碰到了如何通过收盘价计算股票的涨跌幅. 第一种: 读取数据并建立函数: import numpy as np imp ...

  2. python种颜色循环_Python 实现一个颜色色值转换的小工具

    需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了.Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RG ...

  3. python中导入模块使用哪个关键字_关于python导入模块的关键字介绍

    关于python导入模块的关键字介绍 发布时间:2020-04-17 10:13:26 来源:亿速云 阅读:101 作者:小新 今天小编给大家分享的是关于python导入模块的关键字介绍,很多人都不太 ...

  4. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  5. python按某列拆分excel表格_利用Python+Pandas实现从一个excel表中提取列形成新表

    简要 利用python实现把一个工作表中的某些列,和其中单独的一列,提取成为一个个新表. 如图(处理前)蓝色部分是需要保留的列,红色是需要一项一项分出来作为单独表格的列. 其中,第一行的名字是用的回车 ...

  6. python中format函数用法简书_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...

    Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...

  7. 在python中print表示的数据类型是_【Python连载】那些必须掌握的Python数据类型

    原标题:[Python连载]那些必须掌握的Python数据类型 经过近几年的发展,Python已成为了数据科学和机器学习的首选语言,许多人也因此开始走上自学python之路.从今天开始,本公众号将陆续 ...

  8. 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...

    如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 float 类型的区别: 你可能想知道同一内置运算符或函数如何对不同类对象进行不同操作的.这分别 ...

  9. python中对象和变量的关系_浅析python中的类变量和对象变量

    刚学python,学到了有关于类和对象的地方.对一个概念有点模糊,后来通过实践编码找到一定规律 在python中 class test(object): id=2 name='tt' list=['t ...

最新文章

  1. 从应用到内核查接口超时(中)
  2. 一款 PO VO DTO 转换神器
  3. python3精要(26)-map
  4. poj3164(最小树形图朱刘算法模板)
  5. GoF的23个经典设计模式
  6. mysql--------四种索引类型
  7. [包计划] node-fs-extra
  8. C语言 二维数组定义和使用 - C语言零基础入门教程
  9. java 8 java demo_Java 8 中的 Streams API Demo
  10. Java 数组常用操作二(扩充、扩容、重复数据、动态数组、数组差集、数组交集、查找指定元素、判断是否相同、数组合并)
  11. 浅谈Opencl四大模型之Programming Model
  12. 【重构笔记04】重新组织数据(2)
  13. Web端微信授权登录
  14. 【Pr】视频剪辑学习记录——导出
  15. quadro 2000专业显卡 win7计算机体验指数5.9,quadro显卡天梯图小虫_quadro专业显卡天梯图小虫2020年 - 系统家园...
  16. 索尼爱立信滑盖机java_可爱Walkman滑盖机 索尼爱立信W100i评测
  17. ImageMagick将多张图片拼接成一张图片_高逼格九宫格图片,2020年朋友圈图片,自己做不求人...
  18. 继续分享一些基础的Python编程2
  19. Java连接sqlserver数据库,并进行增删改查操作
  20. linux大作业聊天室报告,Linux聊天室系统期末大作业.docx

热门文章

  1. 性能测试LoadRunner_Monitors
  2. 从word得到表格数据插入数据库(6位行业代码)
  3. Java后台通过jxl生成Excel表格
  4. 微信小程序之----问题
  5. jQuery起点教程之有序化插件实例
  6. PHP无法使用file_get_contents或者curl_init()函数解决办法
  7. windows curl ssl版本编译
  8. pthread_join来接收线程的返回参数
  9. AndroidStudio_android使用自己封装的消息队列处理问题_封装LinkedQueue---Android原生开发工作笔记242
  10. ES6新特性_ES6迭代器技术---JavaScript_ECMAScript_ES6-ES11新特性工作笔记018