最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python實現(xiàn)顏色色值轉(zhuǎn)換的小工具

 更新時間:2016年10月27日 10:23:58   作者:張瑞Jerrysher  
最近一個朋友說已經(jīng)轉(zhuǎn)用Zeplin很久了。Zeplin的設(shè)計稿展示頁面的顏色色值使用十進(jìn)制的 RGB 表示的,在 Android 中的顏色表示大多情況下都需要十六進(jìn)制的 RGB 表示。所以想寫個工作,當(dāng)輸入十進(jìn)制的RGB ,得到十六進(jìn)制的色值,最好可以方便復(fù)制。下面來一起看看吧。

先看看Zeplin 的顏色色值顯示示例

原有處理方式

因為我會 Python (僅限于終端輸入 python 然后當(dāng)做計算器算,或者用 hex() 函數(shù)把十進(jìn)制轉(zhuǎn)換成十六進(jìn)制),所以遇到這樣的問題我當(dāng)然是采用python 的 hex() 函數(shù)做轉(zhuǎn)換,然后手動結(jié)果輸入到 Android Studio 中。


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

動機(jī)

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

     輸入: 類似 RGB 的十進(jìn)制值(110, 122 138),用空格或者逗號分割一下。

     輸出: 一個十六進(jìn)制的 RGB 顏色色值(#6e7a8a)。

但就一直沒動手,一直講究著。真懶!

開干

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

我打開我之前學(xué)習(xí) Python 的文件夾,里面正好有一個 raw_input 的示例:

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

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

在終端執(zhí)行 python input.py 后, 可以輸入文字。

我需要接受到用戶輸入的信息。怎么接收忘記了, Google 之,得到結(jié)果,順便改改輸入提示語,打印出輸入的內(nèi)容:

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

2. 需要分割字符

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

rgbColorArray = input.split()
print(rgbColorArray)

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

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

for x in rgbColorArray: print(x)

4. 字符轉(zhuǎn)成十六進(jìn)制

這個時候拿到了字符串,要變成十六進(jìn)制的字符串。這個時候需要兩個函數(shù), int() hex() ,int 函數(shù)可以將字符串轉(zhuǎn)成 int 類型,而 hex 則接受數(shù)字參數(shù),返回字符串。 0x開始的字符串。

于是就有了第一個版本。

第一個版本

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

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

再進(jìn)一步

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

      1、當(dāng)要轉(zhuǎn)換的數(shù)字小于16的時候 只有一位不顯示,比如11 顯示的結(jié)果是0xB

      2、現(xiàn)實的結(jié)果多了0x

      3、顯示的結(jié)果最好連在一起方便復(fù)制,而不是每個顏色一行。

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

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   # 跳出當(dāng)前循環(huán)
 else:     # 循環(huán)的 else 部分
  print num, '是一個質(zhì)數(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í)行結(jié)果:

var1[0]: H
var2[1:5]: ytho

順便問了旁邊也在學(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ù),比如還是上面的范例可以寫成。比如上面的例子如果 print "var2[-1:]" , var2[-1:] 得到的結(jié)果應(yīng)該是 ob 也就是字符串的后兩位。

于是我們這里可以寫成hex(intx)[-2:] (因為輸出字符串類似是0x23, 這樣的)就是這個導(dǎo)致我后面寫了個 bug,我也文章最后說明這個 bug 是什么。

if else 判斷

接著要做一個判斷,給一位的補(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)境變量中

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

python colorU.py

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

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

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

后續(xù)

后來據(jù)說 Zeplin 的客戶端可以默認(rèn)顯示十六進(jìn)制的色值,而我用的是網(wǎng)頁版的,所以沒有。也就是說如果我裝客戶端就可以不用我寫的這個腳本了。但沒關(guān)系我學(xué)習(xí)了 python,寫了我自己的第一個真正有用的 python 代碼。

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


倒向裁剪字符串引起的bug

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

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

     b. 配合Alfred, 呼出 Alfred 窗口后,輸入色值,得到結(jié)果,回車直接復(fù)制十六進(jìn)制到粘貼板。

     c. 保存之前已經(jīng)轉(zhuǎn)換過的色值,方便重復(fù)使用的顏色,直接復(fù)制十六進(jìn)制顏色。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 靈活運(yùn)用Python 枚舉類來實現(xiàn)設(shè)計狀態(tài)碼信息

    靈活運(yùn)用Python 枚舉類來實現(xiàn)設(shè)計狀態(tài)碼信息

    在python中枚舉是一種類(Enum,IntEnum),存放在enum模塊中。枚舉類型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python3監(jiān)控CentOS磁盤空間腳本

    python3監(jiān)控CentOS磁盤空間腳本

    這篇文章主要為大家詳細(xì)介紹了Python3監(jiān)控CentOS磁盤空間腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 如何使用Python設(shè)置和讀取config.ini文件

    如何使用Python設(shè)置和讀取config.ini文件

    使用配置文件是一種常見的方法,而INI文件是一種簡單而常見的配置文件格式,在本文中,我將介紹如何使用Python設(shè)置和讀取INI格式的配置文件,需要的朋友可以參考下
    2024-03-03
  • Django之choices選項和富文本編輯器的使用詳解

    Django之choices選項和富文本編輯器的使用詳解

    這篇文章主要介紹了Django之choices選項和富文本編輯器的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • protobuf 序列化和反序列化操作流程

    protobuf 序列化和反序列化操作流程

    Protocol Buffers(protobuf)是一種輕量級的數(shù)據(jù)交換格式,可以用于結(jié)構(gòu)化數(shù)據(jù)的序列化和反序列化,它使用二進(jìn)制格式來編碼數(shù)據(jù),以提高傳輸效率和數(shù)據(jù)壓縮比,這篇文章主要介紹了protobuf 序列化和反序列化操作流程,需要的朋友可以參考下
    2024-06-06
  • Python利用ansible分發(fā)處理任務(wù)

    Python利用ansible分發(fā)處理任務(wù)

    這篇文章主要介紹了Python利用ansible分發(fā)處理任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2015-08-08
  • Python實現(xiàn)批量上傳本地maven庫到nexus

    Python實現(xiàn)批量上傳本地maven庫到nexus

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)批量上傳本地maven庫到nexus,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考下
    2024-01-01
  • Python基于Socket實現(xiàn)簡易多人聊天室的示例代碼

    Python基于Socket實現(xiàn)簡易多人聊天室的示例代碼

    這篇文章主要介紹了Python基于Socket實現(xiàn)簡易多人聊天室的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法

    將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法

    大多數(shù)數(shù)據(jù)科學(xué)在線課程都把Jupyter Notebook作為教學(xué)媒介,這是因為初學(xué)者在Jupyter Notebook的單元格中編寫代碼,比編寫包含類和函數(shù)的腳本更容易,這篇文章主要給大家介紹了關(guān)于將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法,需要的朋友可以參考下
    2023-10-10
  • Python文本文件的合并操作方法代碼實例

    Python文本文件的合并操作方法代碼實例

    這篇文章主要介紹了Python文本文件的合并操作方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論

沙雅县| 怀仁县| 小金县| 天镇县| 永兴县| 勃利县| 永登县| 灌云县| 兴义市| 九龙坡区| 阳泉市| 榆社县| 敖汉旗| 丹东市| 四川省| 宁德市| 都昌县| 扎赉特旗| 商南县| 江都市| 赞皇县| 保亭| 隆化县| 北辰区| 芜湖市| 铜川市| 花垣县| 苍山县| 独山县| 集安市| 旺苍县| 莱阳市| 威海市| 勐海县| 澄迈县| 峨山| 蒲城县| 湖口县| 寿阳县| 中西区| 林芝县|