我用 Python 寫了一個顏色色值轉換的小工具

需求說明

公司的 UI 設計小哥,已經(jīng)轉用 Zeplin 很久了。Zeplin 的設計稿展示頁面的顏色色值使用十進制的 RGB 表示的,在 Android 中的顏色表示大多情況下都需要十六進制的 RGB 表示羡蛾。我的數(shù)學沒有好到直接看到十進制就可以心算得到十六進制的結果,所以我需要一個工具,輸入十進制的 RGB 痴怨,得到十六進制的色值忙干,最好可以方便復制。

Zeplin 的顏色色值顯示示例

原有處理方式

因為我會 Python (僅限于終端輸入 python 然后當做計算器算浪藻,或者用 hex() 函數(shù)把十進制轉換成十六進制)捐迫,所以遇到這樣的問題我當然是采用pythonhex() 函數(shù)做轉換,然后手動結果輸入到 Android Studio 中爱葵。

采用 hex 函數(shù)手動轉換色值

動機

人總是懶得施戴,想要寫這個小工具已經(jīng)很久了,我也打過有過構思就是:

輸入: 類似 RGB 的十進制值(110, 122 138)萌丈,用空格或者逗號分割一下赞哗。
輸出: 一個十六進制的 RGB 顏色色值(#6e7a8a)。

但就一直沒動手辆雾,一直講究著肪笋。真懶!

開干

1.首先我需要輸入函數(shù)

我打開我之前學習 Python 的文件夾度迂,里面正好有一個 raw_input 的示例:

#!/usr/bin/python
#coding=utf-8

raw_input("\n\n等輸入")

在終端執(zhí)行 python input.py 后藤乙, 可以輸入文字。
我需要接受到用戶輸入的信息惭墓。怎么接收忘記了坛梁, Google 之,得到結果腊凶,順便改改輸入提示語划咐,打印出輸入的內(nèi)容:

input = raw_input("\n輸入顏色 比如50 144 60:\n")
print(input)

2. 需要分割字符

查詢到python 字符分割函數(shù) split(),默認不傳入?yún)?shù)就可以用空白符分割钧萍。原本還說用英文逗號(,)作為分隔符褐缠,現(xiàn)在看來可以省了,直接用空格分割划煮,無論多少空格都可以自動分割送丰。于是加上代碼:

rgbColorArray = input.split()
print(rgbColorArray)

3. 需要遍歷數(shù)組

簡單的遍歷數(shù)組的是怎么弄的也忘記了,同樣搜索:

for x in rgbColorArray:  print(x)

3. 字符轉成十六進制

這個時候拿到了字符串弛秋,要變成十六進制的字符串器躏。這個時候需要兩個函數(shù), int()hex()蟹略,int 函數(shù)可以將字符串轉成 int 類型登失,而 hex 則接受數(shù)字參數(shù),返回字符串挖炬。 0x開始的字符串揽浙。
于是就有了第一個版本。

第一個版本

第一個版本
第一個版本執(zhí)行結果

寫出這樣的基礎版本已經(jīng)基本可以得到我想要的結果了,缺點是還需要我手動收入馅巷,動用大腦記憶十六進制色值然后輸入膛虫。希望可以直接復制最后結果。

再進一步

雖然結果已經(jīng)出來了钓猬,但是還是希望可以在進步一些稍刀,有幾個問題:

  1. 當要轉換的數(shù)字小于16的時候 只有一位不顯示,比如11 顯示的結果是0xB
  2. 現(xiàn)實的結果多了0x
  3. 顯示的結果最好連在一起方便復制敞曹,而不是每個顏色一行账月。

那么就需要遍歷顏色值數(shù)組,去掉0x 字符串澳迫, 判斷小于16的前面補上0局齿。連續(xù)在一起輸出結果。

for 循環(huán)遍歷數(shù)組

前面用到了 for 循環(huán)橄登,是從查到的范例抓歼,不過多行就不知道怎么弄了。java 寫多了一般都是 { } 大括號括起來示绊。
繼續(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:      # 確定第一個因子
         j=num/i          # 計算第二個因子
         print '%d 等于 %d * %d' % (num,i,j)
         break            # 跳出當前循環(huán)
   else:                  # 循環(huán)的 else 部分
      print num, '是一個質數(shù)'

變量聲明

由于需要不換行面褐,所以就需要字符連接,而不是直接 print取胎。
聲明變量又遇到問題了展哭。根據(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]

這個范例的執(zhí)行結果:

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)

也可以從后往前數(shù)棵介,比如還是上面的范例可以寫成。比如上面的例子如果 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 加入到環(huán)境變量中

這個時候我可以得到我要的記過了岩睁,但是有點不太方便,我需要到這個 python 文件所在的目錄下寫

python colorU.py

或者寫全 colorU.py 這個路徑揣云。都是很麻的事情笙僚,所以我需要把 colorU 加入環(huán)境變量中。我用的是 zsh灵再,所以找到環(huán)境變量的配置文件:~/.zshrc,末尾加上配置:

alias colorU="python ~/Documents/Development/PythonStudy/colorU.py"

這個是經(jīng)過另外以為同事指導后的最后可行版本肋层,我最初的思路是把 colorU.py 文件設置成可執(zhí)行文件,然后加入到 Path 當中翎迁。結果我把 colorU.py 這個文件的地址加入到了 Path 中栋猖,世界上PATH 應該是一個目錄。這樣添加別名的方式更方便汪榔。

后續(xù)

  1. 后來據(jù)說 Zeplin 的客戶端可以默認顯示十六進制的色值蒲拉,而我用的是網(wǎng)頁版的,所以沒有痴腌。也就是說如果我裝客戶端就可以不用我寫的這個腳本了雌团。但沒關系我學習了 python,寫了我自己的第一個真正有用的 python 代碼士聪。

  2. 一個bug:我是在寫這篇文章的時候才發(fā)現(xiàn)這個 bug 的锦援,類似0x33這樣的字符串從后往前裁剪的時候寫[-2:],當然沒有問題剥悟,但是寫0xf 這樣的字符串就會有問題了灵寺。程序輸入 5 5 5得到的結果是 #0x50x50x5。修改成[2:] 的裁剪就可以了区岗。

倒向裁剪字符串引起的bug
  1. 還可以繼續(xù)升級體驗:

a. 直接在終端中輸入 colorU 231 234 123 就可以得到結果 #e7ea7b;
b. 配合Alfred略板, 呼出 Alfred 窗口后,輸入色值慈缔,得到結果叮称,回車直接復制十六進制到粘貼板。
c. 保存之前已經(jīng)轉換過的色值藐鹤,方便重復使用的顏色瓤檐,直接復制十六進制顏色。

參考:

菜鳥教程

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末教藻,一起剝皮案震驚了整個濱河市距帅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌括堤,老刑警劉巖碌秸,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍移,死亡現(xiàn)場離奇詭異,居然都是意外死亡讥电,警方通過查閱死者的電腦和手機蹂窖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恩敌,“玉大人瞬测,你說我怎么就攤上這事【琅冢” “怎么了月趟?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恢口。 經(jīng)常有香客問我孝宗,道長,這世上最難降的妖魔是什么耕肩? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任因妇,我火速辦了婚禮,結果婚禮上猿诸,老公的妹妹穿的比我還像新娘婚被。我一直安慰自己,他們只是感情好梳虽,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布址芯。 她就那樣靜靜地躺著,像睡著了一般怖辆。 火紅的嫁衣襯著肌膚如雪是复。 梳的紋絲不亂的頭發(fā)上删顶,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天竖螃,我揣著相機與錄音,去河邊找鬼逗余。 笑死特咆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的录粱。 我是一名探鬼主播腻格,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啥繁!你這毒婦竟也來了菜职?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旗闽,失蹤者是張志新(化名)和其女友劉穎酬核,沒想到半個月后蜜另,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嫡意,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年举瑰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬螟。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡此迅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旧巾,到底是詐尸還是另有隱情耸序,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布鲁猩,位于F島的核電站佑吝,受9級特大地震影響,放射性物質發(fā)生泄漏绳匀。R本人自食惡果不足惜芋忿,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疾棵。 院中可真熱鬧戈钢,春花似錦、人聲如沸是尔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拟枚。三九已至薪铜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恩溅,已是汗流浹背隔箍。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脚乡,地道東北人蜒滩。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像奶稠,于是被迫代替她去往敵國和親俯艰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容