Python 實現一個顏色色值轉換的小工具,python

來源:互聯網
上載者:User

Python 實現一個顏色色值轉換的小工具,python

  需求說明

  公司的 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. 儲存之前已經轉換過的色值,方便重複使用的顏色,直接複製十六進位顏色。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.