利用Python實(shí)現(xiàn)顏色色值轉(zhuǎn)換的小工具
先看看Zeplin 的顏色色值顯示示例

原有處理方式
因?yàn)槲視?huì) Python (僅限于終端輸入 python 然后當(dāng)做計(jì)算器算,或者用 hex() 函數(shù)把十進(jìn)制轉(zhuǎn)換成十六進(jìn)制),所以遇到這樣的問(wèn)題我當(dāng)然是采用python 的 hex() 函數(shù)做轉(zhuǎn)換,然后手動(dòng)結(jié)果輸入到 Android Studio 中。

采用 hex 函數(shù)手動(dòng)轉(zhuǎn)換色值
動(dòng)機(jī)
人總是懶得,想要寫(xiě)這個(gè)小工具已經(jīng)很久了,我也打過(guò)有過(guò)構(gòu)思就是:
輸入: 類似 RGB 的十進(jìn)制值(110, 122 138),用空格或者逗號(hào)分割一下。
輸出: 一個(gè)十六進(jìn)制的 RGB 顏色色值(#6e7a8a)。
但就一直沒(méi)動(dòng)手,一直講究著。真懶!
開(kāi)干
1.首先我需要輸入函數(shù)
我打開(kāi)我之前學(xué)習(xí) Python 的文件夾,里面正好有一個(gè) raw_input 的示例:
#!/usr/bin/python
#coding=utf-8
raw_input("\n\n等輸入")
在終端執(zhí)行 python input.py 后, 可以輸入文字。
我需要接受到用戶輸入的信息。怎么接收忘記了, Google 之,得到結(jié)果,順便改改輸入提示語(yǔ),打印出輸入的內(nèi)容:
input = raw_input("\n輸入顏色 比如50 144 60:\n")
print(input)
2. 需要分割字符
查詢到python 字符分割函數(shù) split() ,默認(rèn)不傳入?yún)?shù)就可以用空白符分割。原本還說(shuō)用英文逗號(hào)(,)作為分隔符,現(xiàn)在看來(lái)可以省了,直接用空格分割,無(wú)論多少空格都可以自動(dòng)分割。于是加上代碼:
rgbColorArray = input.split() print(rgbColorArray)
3. 需要遍歷數(shù)組
簡(jiǎn)單的遍歷數(shù)組的是怎么弄的也忘記了,同樣搜索:
for x in rgbColorArray: print(x)
4. 字符轉(zhuǎn)成十六進(jìn)制
這個(gè)時(shí)候拿到了字符串,要變成十六進(jìn)制的字符串。這個(gè)時(shí)候需要兩個(gè)函數(shù), int() 和 hex() ,int 函數(shù)可以將字符串轉(zhuǎn)成 int 類型,而 hex 則接受數(shù)字參數(shù),返回字符串。 0x開(kāi)始的字符串。
于是就有了第一個(gè)版本。
第一個(gè)版本

第一個(gè)版本執(zhí)行結(jié)果

寫(xiě)出這樣的基礎(chǔ)版本已經(jīng)基本可以得到我想要的結(jié)果了,缺點(diǎn)是還需要我手動(dòng)收入,動(dòng)用大腦記憶十六進(jìn)制色值然后輸入。希望可以直接復(fù)制最后結(jié)果。
再進(jìn)一步
雖然結(jié)果已經(jīng)出來(lái)了,但是還是希望可以在進(jìn)步一些,有幾個(gè)問(wèn)題:
1、當(dāng)要轉(zhuǎn)換的數(shù)字小于16的時(shí)候 只有一位不顯示,比如11 顯示的結(jié)果是0xB
2、現(xiàn)實(shí)的結(jié)果多了0x
3、顯示的結(jié)果最好連在一起方便復(fù)制,而不是每個(gè)顏色一行。
那么就需要遍歷顏色值數(shù)組,去掉0x 字符串, 判斷小于16的前面補(bǔ)上0。連續(xù)在一起輸出結(jié)果。
for 循環(huán)遍歷數(shù)組
前面用到了 for 循環(huán),是從查到的范例,不過(guò)多行就不知道怎么弄了。java 寫(xiě)多了一般都是 { } 大括號(hào)括起來(lái)。
繼續(xù)查資料,于是知道是大概下面這樣的用法。
#!/usr/bin/python # -*- coding: UTF-8 -*- for num in range(10,20): # 迭代 10 到 20 之間的數(shù)字 for i in range(2,num): # 根據(jù)因子迭代 if num%i == 0: # 確定第一個(gè)因子 j=num/i # 計(jì)算第二個(gè)因子 print '%d 等于 %d * %d' % (num,i,j) break # 跳出當(dāng)前循環(huán) else: # 循環(huán)的 else 部分 print num, '是一個(gè)質(zhì)數(shù)'
變量聲明
由于需要不換行,所以就需要字符連接,而不是直接 print。
聲明變量又遇到問(wèn)題了。根據(jù)前面的變量使用情況,找了些 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] 這個(gè)范例的執(zhí)行結(jié)果: var1[0]: H var2[1:5]: ytho
順便問(wèn)了旁邊也在學(xué)習(xí) python 的同事,他告訴我后面的索引可以省略,代表直接裁剪到結(jié)尾。
比如上面的例子如果 print "var2[1:]", var2[1:] 得到的結(jié)果應(yīng)該是 ython Runoob
所以有代碼:
output = "#" for x in rgbColorArray: intx = int(x) output = output + hex(intx)[2:] print(output)
也可以從后往前數(shù),比如還是上面的范例可以寫(xiě)成。比如上面的例子如果 print "var2[-1:]" , var2[-1:] 得到的結(jié)果應(yīng)該是 ob 也就是字符串的后兩位。
于是我們這里可以寫(xiě)成hex(intx)[-2:] (因?yàn)檩敵鲎址愃剖?x23, 這樣的)就是這個(gè)導(dǎo)致我后面寫(xiě)了個(gè) bug,我也文章最后說(shuō)明這個(gè) bug 是什么。
if else 判斷
接著要做一個(gè)判斷,給一位的補(bǔ)上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 加入到環(huán)境變量中
這個(gè)時(shí)候我可以得到我要的記過(guò)了,但是有點(diǎn)不太方便,我需要到這個(gè) python 文件所在的目錄下寫(xiě)
python colorU.py
或者寫(xiě)全 colorU.py 這個(gè)路徑。都是很麻的事情,所以我需要把 colorU 加入環(huán)境變量中。我用的是 zsh,所以找到環(huán)境變量的配置文件:~/.zshrc,末尾加上配置:
alias colorU="python ~/Documents/Development/PythonStudy/colorU.py"
這個(gè)是經(jīng)過(guò)另外以為同事指導(dǎo)后的最后可行版本,我最初的思路是把 colorU.py 文件設(shè)置成可執(zhí)行文件,然后加入到 Path 當(dāng)中。結(jié)果我把 colorU.py 這個(gè)文件的地址加入到了 Path 中,世界上PATH 應(yīng)該是一個(gè)目錄。這樣添加別名的方式更方便。
后續(xù)
后來(lái)?yè)?jù)說(shuō) Zeplin 的客戶端可以默認(rèn)顯示十六進(jìn)制的色值,而我用的是網(wǎng)頁(yè)版的,所以沒(méi)有。也就是說(shuō)如果我裝客戶端就可以不用我寫(xiě)的這個(gè)腳本了。但沒(méi)關(guān)系我學(xué)習(xí)了 python,寫(xiě)了我自己的第一個(gè)真正有用的 python 代碼。
一個(gè)bug:我是在寫(xiě)這篇文章的時(shí)候才發(fā)現(xiàn)這個(gè) bug 的,類似0x33這樣的字符串從后往前裁剪的時(shí)候?qū)慬-2:],當(dāng)然沒(méi)有問(wèn)題,但是寫(xiě)0xf 這樣的字符串就會(huì)有問(wèn)題了。程序輸入 5 5 5得到的結(jié)果是 #0x50x50x5。修改成[2:] 的裁剪就可以了。

倒向裁剪字符串引起的bug
還可以繼續(xù)升級(jí)體驗(yàn):
a. 直接在終端中輸入 colorU 231 234 123 就可以得到結(jié)果 #e7ea7b;
b. 配合Alfred, 呼出 Alfred 窗口后,輸入色值,得到結(jié)果,回車直接復(fù)制十六進(jìn)制到粘貼板。
c. 保存之前已經(jīng)轉(zhuǎn)換過(guò)的色值,方便重復(fù)使用的顏色,直接復(fù)制十六進(jìn)制顏色。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
- python在linux中輸出帶顏色的文字的方法
- Python+matplotlib繪制不同大小和顏色散點(diǎn)圖實(shí)例
- Python通過(guò)PIL獲取圖片主要顏色并和顏色庫(kù)進(jìn)行對(duì)比的方法
- python獲取圖片顏色信息的方法
- python實(shí)現(xiàn)顏色rgb和hex相互轉(zhuǎn)換的函數(shù)
- python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解
- python中matplotlib的顏色及線條控制的示例
- 利用python打開(kāi)攝像頭及顏色檢測(cè)方法
- Python實(shí)現(xiàn)PS圖像調(diào)整顏色梯度效果示例
- Python圖像處理之顏色的定義與使用分析
相關(guān)文章
Python調(diào)用系統(tǒng)底層API播放wav文件的方法
這篇文章主要介紹了Python調(diào)用系統(tǒng)底層API播放wav文件的方法,涉及Python使用pywin32調(diào)用系統(tǒng)底層API讀取與播放wav文件的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
詳解python常用命令行選項(xiàng)與環(huán)境變量
這篇文章主要介紹了python常用命令行選項(xiàng)與環(huán)境變量,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)
這篇文章主要給大家介紹了關(guān)于Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
細(xì)說(shuō)NumPy數(shù)組的四種乘法的使用
這篇文章主要介紹了細(xì)說(shuō)NumPy數(shù)組的四種乘法的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python Numpy中ndarray的常見(jiàn)操作
這篇文章主要介紹了Python Numpy中ndarray的常見(jiàn)操作,NumPy是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展,更多詳細(xì)內(nèi)容需要的朋友可以參考一下2022-07-07
python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法
這篇文章主要介紹了python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法,實(shí)例分析了Python使用pysftp模塊的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)自動(dòng)簽到腳本的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)自動(dòng)簽到腳本的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

