Description de l'exigence
Le responsable de la conception de l'interface utilisateur de l'entreprise passe à Zeplin depuis longtemps. Les valeurs de couleur de la page d'affichage du projet de conception de Zeplin sont représentées par RVB décimal. Dans la plupart des cas, la représentation des couleurs dans Android nécessite une représentation RVB hexadécimale. Mes compétences en mathématiques ne sont pas si bonnes que je puisse calculer mentalement le résultat hexadécimal en voyant directement le système décimal, j'ai donc besoin d'un outil pour saisir le RVB décimal et obtenir la valeur de couleur hexadécimale. Il est préférable de pouvoir copier facilement.
Exemple d'affichage de la valeur de couleur de Zeplin
Méthode de traitement originale
Parce que je connais Python (limité à saisir python dans le terminal puis à l'utiliser comme calculatrice pour calculer , ou en utilisant la fonction hex() convertit le décimal en hexadécimal), donc lorsque j'ai rencontré un tel problème, j'ai bien sûr utilisé la fonction hex() de python pour effectuer la conversion, puis j'ai saisi manuellement les résultats dans Android Studio.
Utilisez la fonction hexadécimale pour convertir manuellement les valeurs de couleur
Motivation
Les gens sont toujours trop paresseux, et je voulais écrire ce gadget depuis longtemps, et Je l'ai déjà essayé. L'idée est la suivante :
Entrée : valeur décimale de type RVB (110, 122 138), séparée par des espaces ou des virgules.
Sortie : Une valeur de couleur RVB hexadécimale (#6e7a8a).
Mais je n’ai encore rien fait, j’ai fait attention. Tellement paresseux !
Commençons
1. Je dois d'abord saisir la fonction
J'ai ouvert le dossier dans lequel j'ai appris Python auparavant, et il se trouve qu'il y avait un exemple. de raw_input dedans :
Code Python
#!/usr/bin/python #coding=utf-8 raw_input("\n\n等输入")
Après avoir exécuté python input.py dans le terminal, vous pouvez saisir du texte.
J'ai besoin de recevoir les informations saisies par l'utilisateur. J'ai oublié comment le recevoir, le rechercher sur Google, obtenir le résultat, modifier l'invite de saisie et imprimer le contenu saisi :
Code Python
input = raw_input("\n输入颜色 比如50 144 60:\n") print(input)
2. caractères
Interrogez la fonction de fractionnement de caractères Python split() Par défaut, vous pouvez diviser par espaces sans passer de paramètres. On disait à l'origine qu'il utilisait une virgule anglaise (,) comme séparateur, mais il semble maintenant qu'elle puisse être omise. Elle peut être séparée directement par des espaces. Quel que soit le nombre d'espaces, elle peut être automatiquement séparée. J'ai donc ajouté le code :
Code Python
rgbColorArray = input.split() print(rgbColorArray)
3 Besoin de parcourir le tableau
J'ai oublié comment faire un parcours simple du tableau, la même recherche :
Code Python
for x in rgbColorArray: print(x)
4. Convertir les caractères en hexadécimal
À ce stade, vous obtenez la chaîne et la convertissez en hexadécimal personnalisé. chaîne. À l'heure actuelle, deux fonctions sont nécessaires, int() et hex(). La fonction int peut convertir la chaîne en type int, tandis que hex accepte les paramètres numériques et renvoie une chaîne. Une chaîne commençant par 0x.
Il existe donc une version.
Il y a donc eu la première version.
La première version
La première version
Le résultat de l'exécution de la première version
Écrire une version aussi basique peut fondamentalement obtenir ce que je veux, j'ai obtenu ce que je voulais résultat, mais l'inconvénient est que je dois toujours la saisir manuellement, utiliser mon cerveau pour mémoriser la valeur de couleur hexadécimale, puis la saisir. J'espère pouvoir copier directement le résultat final.
Aller plus loin
Même si les résultats sont tombés, j'espère quand même faire quelques progrès. Il y a plusieurs questions :
1. Lorsque le nombre à convertir est inférieur à 16, il n'y a qu'un seul chiffre. Non affiché, par exemple, le résultat affiché de 11 est 0xB
2. Le résultat réel est 0x
3. Il est préférable d'afficher les résultats ensemble pour une copie facile, plutôt qu'une seule ligne. pour chaque couleur.
Ensuite, vous devez parcourir le tableau de valeurs de couleur, supprimer la chaîne 0x et ajouter 0 si elle est jugée inférieure à 16. Sortez les résultats ensemble en continu.
la boucle for traverse le tableau
La boucle for a été utilisée plus tôt, et c'était à partir de l'exemple que j'ai trouvé, mais il y a trop de lignes et je ne sais pas comment faire. Si vous écrivez trop en Java, cela est généralement placé entre accolades { }.
J'ai continué à vérifier les informations et j'ai découvert qu'elles sont grossièrement utilisées comme suit.
Code 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:] 的裁剪就可以了。
倒向裁剪字符串引起的bug
还可以继续升级体验:
a. 直接在终端中输入 colorU 231 234 123 就可以得到结果 #e7ea7b;
b. 配合Alfred, 呼出 Alfred 窗口后,输入色值,得到结果,回车直接复制十六进制到粘贴板。
c. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!