欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年12月06日 15:41:46   投稿:lqh  
這篇文章主要介紹了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等輸入") 

  在終端執(zhí)行 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開始的字符串。

  于是就有了版的。

于是就有了第一個版本。

  第一個版本

第一個版本

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

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

  再進一步

  雖然結果已經出來了,但是還是希望可以在進步一些,有幾個問題:

  1. 當要轉換的數字小于16的時候 只有一位不顯示,比如11 顯示的結果是0xB

  2. 現實的結果多了0x

  3. 顯示的結果最好連在一起方便復制,而不是每個顏色一行。

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

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

  前面用到了 for 循環(huán),是從查到的范例,不過多行就不知道怎么弄了。java 寫多了一般都是 { } 大括號括起來。

  繼續(xù)查資料,于是知道是大概下面這樣的用法。

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   # 跳出當前循環(huán) 
 else:     # 循環(huán)的 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] 

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

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 加入到環(huán)境變量中

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

Python代碼

python colorU.py 

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

Python代碼

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

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

也就是說如果我裝客戶端就可以不用我寫的這個腳本了。但沒關系我學習了 python,寫了我自己的第一個真正有用的 python 代碼。

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

倒向裁剪字符串引起的bug

  還可以繼續(xù)升級體驗:

  a. 直接在終端中輸入 colorU 231 234 123 就可以得到結果 #e7ea7b;

  b. 配合Alfred, 呼出 Alfred 窗口后,輸入色值,得到結果,回車直接復制十六進制到粘貼板。

  c. 保存之前已經轉換過的色值,方便重復使用的顏色,直接復制十六進制顏色。

相關文章

  • 用Python獲取亞馬遜商品信息

    用Python獲取亞馬遜商品信息

    大家好,本篇文章主要講的是用Python獲取亞馬遜商品信息,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python爬取你好李煥英豆瓣短評生成詞云的示例代碼

    Python爬取你好李煥英豆瓣短評生成詞云的示例代碼

    這篇文章主要介紹了Python爬取你好李煥英豆瓣短評生成詞云,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 基于Python pyecharts實現多種圖例代碼解析

    基于Python pyecharts實現多種圖例代碼解析

    這篇文章主要介紹了基于Python pyecharts實現多種圖例代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Python?UnicodedecodeError編碼問題解決方法匯總

    Python?UnicodedecodeError編碼問題解決方法匯總

    本文主要介紹了Python?UnicodedecodeError編碼問題解決方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 30?個?Python?函數,加速數據分析處理速度

    30?個?Python?函數,加速數據分析處理速度

    這篇文章主要介紹了30?個?Python?函數,加速數據分析處理速度,Pandas?是?Python?中最廣泛使用的數據分析和操作庫。它提供了許多功能和方法,可以加快數據分析和預處理步驟,下面我們就一起來看看這些方法吧,需要的小伙伴可以參考一下,希望給你帶來幫助
    2021-12-12
  • Python繪制散點密度圖的三種方式詳解

    Python繪制散點密度圖的三種方式詳解

    散點密度圖是在散點圖的基礎上,計算了每個散點周圍分布了多少其他的點,并通過顏色表現出來。本文主要介紹了Python繪制散點密度圖的三種方式,需要的可以參考下
    2022-06-06
  • Pandas讀寫CSV文件的方法示例

    Pandas讀寫CSV文件的方法示例

    這篇文章主要介紹了Pandas讀寫CSV文件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Python實戰(zhàn)之外星人入侵游戲示例代碼

    Python實戰(zhàn)之外星人入侵游戲示例代碼

    這篇文章主要介紹了利用Python編寫的外星人入侵游戲的示例代碼,文中的代碼講解詳細,對我們學習Python有一定的幫助,感興趣的可以學習一下
    2022-01-01
  • 解決pytorch 交叉熵損失輸出為負數的問題

    解決pytorch 交叉熵損失輸出為負數的問題

    這篇文章主要介紹了解決pytorch 交叉熵損失輸出為負數的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python為何不能用可變對象作為默認參數的值

    Python為何不能用可變對象作為默認參數的值

    這篇文章主要介紹了Python為何不能用可變對象作為默認參數的值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論