Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python

Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python

高洛峰
高洛峰Original
2017-03-23 17:09:041605Durchsuche

 Anforderungsbeschreibung
Der UI-Designer des Unternehmens wechselt schon seit langem zu Zeplin. Die Farbwerte der Design-Entwurfsanzeigeseite von Zeplin werden durch dezimale RGB-Darstellung dargestellt. In den meisten Fällen erfordert die Farbdarstellung in Android eine hexadezimale RGB-Darstellung. Meine mathematischen Fähigkeiten sind nicht so gut, dass ich das hexadezimale Ergebnis im Kopf berechnen kann, indem ich das Dezimalsystem direkt sehe. Daher benötige ich ein Werkzeug, um das dezimale RGB einzugeben und den hexadezimalen Farbwert zu erhalten. Es ist am besten, dass es leicht kopiert werden kann.
Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python
Beispiel für die Farbwertanzeige von Zeplin
 Ursprüngliche Verarbeitungsmethode
Weil ich Python kenne (beschränkt auf die Eingabe von Python in das Terminal und die anschließende Verwendung als Taschenrechner zum Berechnen). , oder mit Die Funktion hex() konvertiert Dezimalzahlen in Hexadezimalzahlen. Als ich also auf ein solches Problem stieß, habe ich die Konvertierung natürlich mit der Funktion hex() von Python durchgeführt und die Ergebnisse dann manuell in Android Studio eingegeben.
Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python
Verwenden Sie die Hex-Funktion, um Farbwerte manuell umzuwandeln
 Motivation
Menschen sind immer zu faul, und ich wollte dieses Gadget schon lange schreiben, und Ich habe es schon einmal versucht. Die Idee ist:
Eingabe: RGB-ähnlicher Dezimalwert (110, 122 138), getrennt durch Leerzeichen oder Kommas.
Ausgabe: Ein hexadezimaler RGB-Farbwert (#6e7a8a).
Aber ich habe noch nichts getan, ich habe aufgepasst. So faul!
 Lass uns anfangen
1. Zuerst muss ich die Funktion eingeben
Ich habe den Ordner geöffnet, in dem ich zuvor Python gelernt habe, und da war zufällig ein Beispiel von raw_input darin:
Python-Code

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


Nachdem Sie python input.py im Terminal ausgeführt haben, können Sie Text eingeben.
Ich benötige die vom Benutzer eingegebenen Informationen. Ich habe vergessen, wie ich es empfangen, googeln, das Ergebnis abrufen, die Eingabeaufforderung ändern und den Eingabeinhalt ausdrucken kann:
Python-Code

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


 2 Muss geteilt werden Zeichen
Fragen Sie die Python-Zeichenaufteilungsfunktion split() ab. Standardmäßig können Sie nach Leerzeichen aufteilen, ohne Parameter zu übergeben. Ursprünglich sollte ein Komma (,) als Trennzeichen verwendet werden, aber jetzt scheint es weggelassen zu werden. Es kann direkt durch Leerzeichen getrennt werden, egal wie viele Leerzeichen vorhanden sind. Also habe ich den Code hinzugefügt:
Python-Code

rgbColorArray = input.split() 
print(rgbColorArray)


3. Muss das Array durchlaufen
Ich habe vergessen, wie man das Array einfach durchläuft. die gleiche Suche:
Python-Code

for x in rgbColorArray: print(x)


 4. Konvertieren Sie Zeichen in Hexadezimalzahl
Zu diesem Zeitpunkt erhalten Sie die Zeichenfolge und konvertieren sie in Hexadezimalzahl Angepasst Zeichenfolge. Zu diesem Zeitpunkt sind zwei Funktionen erforderlich: int() und hex(). Die Funktion int kann die Zeichenfolge in den Typ int konvertieren, während hex numerische Parameter akzeptiert und eine Zeichenfolge zurückgibt. Eine Zeichenfolge, die mit 0x beginnt.
Es gibt also eine Version.
Es gab also die erste Version.
 Die erste Version
Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python
Die erste Version
Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python
Das Ausführungsergebnis der ersten Version
Das Schreiben einer solchen Basisversion kann im Grunde das bekommen, was ich will, ich habe das Gewünschte bekommen Ergebnis, aber der Nachteil ist, dass ich es immer noch manuell eingeben, mein Gehirn verwenden muss, um mir den hexadezimalen Farbwert zu merken, und ihn dann eingeben muss. Ich hoffe, dass ich das Endergebnis direkt kopieren kann.
Weiter gehen
Obwohl die Ergebnisse vorliegen, hoffe ich immer noch, einige Fortschritte zu machen:
1. Wenn die umzurechnende Zahl kleiner als 16 ist, Es gibt nur eine Ziffer. Wird nicht angezeigt. Das angezeigte Ergebnis von 11 ist beispielsweise 0xB
2. Das tatsächliche Ergebnis ist 0x
3. Zum einfachen Kopieren ist es am besten, die Ergebnisse zusammen anzuzeigen, anstatt eine Zeile für jede Farbe.
Dann müssen Sie das Farbwert-Array durchlaufen, die 0x-Zeichenfolge entfernen und 0 voranstellen, wenn der Wert kleiner als 16 ist. Geben Sie die Ergebnisse fortlaufend gemeinsam aus.
 for-Schleife durchläuft das Array
 Die for-Schleife wurde früher verwendet und stammt aus dem Beispiel, das ich gefunden habe, aber es sind zu viele Zeilen und ich weiß nicht, wie ich das machen soll. Wenn Sie zu viel in Java schreiben, wird es normalerweise in geschweifte Klammern { } eingeschlossen.
Ich habe die Informationen weiter überprüft und festgestellt, dass sie ungefähr wie folgt verwendet werden.
Python-Code

#!/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:] 的裁剪就可以了。
Einführung in ein kleines Tool zur Farbwertkonvertierung mit Python
倒向裁剪字符串引起的bug
  还可以继续升级体验:
  a. 直接在终端中输入 colorU 231 234 123 就可以得到结果 #e7ea7b;
  b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。
  c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。

Das obige ist der detaillierte Inhalt vonEinführung in ein kleines Tool zur Farbwertkonvertierung mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn