ホームページ  >  記事  >  バックエンド開発  >  Python を使用したカラー値変換のための小さなツールの紹介

Python を使用したカラー値変換のための小さなツールの紹介

高洛峰
高洛峰オリジナル
2017-03-23 17:09:041666ブラウズ

需要の説明
会社のUIデザイン担当者は、長い間Zeplinに切り替えてきました。 Zeplin のデザインドラフト表示ページのカラー値は 10 進数の RGB で表されますが、Android でのカラー表現には 16 進数の RGB 表現が必要です。私の数学的スキルは、10 進数を直接見て 16 進数の結果を暗算できるほど優れているわけではないので、10 進数の RGB を入力して 16 進数のカラー値を簡単にコピーできるツールが必要です。
Python を使用したカラー値変換のための小さなツールの紹介
Zeplinカラー値表示例
独自の処理方法
私はPythonを知っているので(ターミナルにPythonを入力して電卓として使うか、hex()関数を使って10進数を16進数に変換する場合に限る)、このような問題に遭遇したときは、もちろん Python の hex() 関数を使用して変換し、その結果を手動で Android Studio に入力しました。
Python を使用したカラー値変換のための小さなツールの紹介
色の値を手動で変換するには16進関数を使用してください
モチベーション
人々はいつも怠け者なので、私は長い間このガジェットを書きたいと思っていました:
入力:RGBのような10進数値。 (110, 122 138)、スペースまたはカンマで区切ります。
出力: 16 進数の RGB カラー値 (#6e7a8a)。
でも、私はまだ何もしていない、注意を払っている。すごくだるい!
始めましょう
1. まず関数を入力する必要があります
以前Pythonを学習したフォルダーを開くと、たまたまraw_inputのサンプルが入っていました:
Pythonコード

#!/usr/bin/python 
#coding=utf-8 
 
raw_input("\n\n等输入")


を実行した後ターミナル上で python input.py を実行するとテキストを入力できます。
ユーザーが入力した情報を受け取る必要があります。受け取り方を忘れてしまい、ググって結果を取得し、入力プロンプトを変更して入力内容を出力します:
Pythonコード

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


2.文字を分割する必要があります
Pythonの文字分割関数を調べてくださいsplit( )、デフォルト パラメータを渡さずに空白を使用して区切ることができます。当初は区切り文字として英語のカンマ(,)を使うとされていましたが、現在は空白がいくつあっても直接区切りできるようです。そこで私はコードを追加しました:
Python code

rgbColorArray = input.split() 
print(rgbColorArray)


3. 配列を走査する必要があります
配列の単純な走査を行う方法を忘れました。同じように検索します:
Python code

for x in rgbColorArray: print(x)


4.文字から 10 までの 16 進数
このとき、文字列を取得して 16 進数の文字列に変換しました。このとき、int() と hex() の 2 つの関数が必要です。int 関数は文字列を int 型に変換できますが、hex は数値パラメータを受け入れて文字列を返します。 0x で始まる文字列。
バージョンがあります。
最初のバージョンがありました。
最初のバージョン
Python を使用したカラー値変換のための小さなツールの紹介
最初のバージョン
Python を使用したカラー値変換のための小さなツールの紹介
最初のバージョンの実行結果
このような基本的なバージョンを書くと、基本的に望む結果が得られますが、欠点は、依然として手動で入力して脳の記憶を使用する必要があることです。次に、16 進数のカラー値を入力します。最終結果を直接コピーできればと思います。
さらに進んでください
結果は出ましたが、まだ少しは前進したいと思っています:
1. 変換する数値が 16 未満の場合、1 桁だけが表示されません。 11 の表示結果は 0xB
2. 実際の結果は 0x more
3. コピーしやすいように、色ごとに 1 行ではなく、結果をまとめて表示するのが最善です。
次に、カラー値の配列を走査し、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 <p style="text-align: left;"><br>  这样就有了python 文件:<br>Python代码</p><pre class="brush:php;toolbar:false">#!/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 <p style="text-align: left;"><br>  还有最后一步:把 ColorU 加入到环境变量中<br>  这个时候我可以得到我要的记过了,但是有点不太方便,我需要到这个 python 文件所在的目录下写<br>Python代码</p><pre class="brush:php;toolbar:false">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:] 的裁剪就可以了。
Python を使用したカラー値変換のための小さなツールの紹介
倒向裁剪字符串引起的bug
  还可以继续升级体验:
  a. 直接在终端中输入 colorU 231 234 123 就可以得到结果 #e7ea7b;
  b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。
  c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。

以上がPython を使用したカラー値変換のための小さなツールの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。