요구사항 설명
회사의 UI 디자인 담당자가 오랫동안 Zeplin으로 전환해 왔습니다. Zeplin의 디자인 초안 표시 페이지의 색상 값은 10진수 RGB로 표시되며, 대부분의 경우 Android에서 색상 표현을 위해서는 16진수 RGB 표현이 필요합니다. 제가 수학실력이 좋지 않아서 10진법을 직접 보고 16진수 결과를 암산으로 계산할 수 없기 때문에 10진수 RGB를 입력해서 16진수 색상 값을 쉽게 복사할 수 있는 도구가 필요합니다.
제플린의 색상값 표시 예
원래 처리 방법
파이썬을 알고 있기 때문에(파이썬을 터미널에 입력한 뒤 계산기로 사용해서 계산하는 것에 한함) , 또는 hex() 함수를 사용하면 10진수를 16진수로 변환하므로 이러한 문제가 발생하면 물론 Python의 hex() 함수를 사용하여 변환을 수행한 다음 수동으로 결과를 Android Studio에 입력했습니다.
16진수 함수를 사용하여 색상 값을 수동으로 변환
동기 부여
사람들은 항상 너무 게으른 편이라 오랫동안 이 가젯을 쓰고 싶었는데, 이전에 시도해 본 적이 있습니다. 아이디어는 다음과 같습니다.
입력: RGB와 같은 십진수 값(110, 122 138)을 공백이나 쉼표로 구분합니다.
출력: 16진수 RGB 색상 값(#6e7a8a).
하지만 저는 아직 아무것도 하지 않고 주의를 기울이고 있어요. 너무 게으르다!
시작하겠습니다
1. 먼저 함수를 입력해야 합니다
예전에 파이썬을 배웠던 폴더를 열었는데 우연히 예제가 나와있네요 of raw_input 내용:
Python code
#!/usr/bin/python #coding=utf-8 raw_input("\n\n等输入")
터미널에서 python input.py를 실행한 후 텍스트를 입력할 수 있습니다.
사용자가 입력한 정보를 받아야 합니다. 수신 방법, Google it, 결과 가져오기, 입력 프롬프트 변경 및 입력 내용 인쇄 방법을 잊어버렸습니다.
Python 코드
input = raw_input("\n输入颜色 比如50 144 60:\n") print(input)
2. 문자를 분할해야 합니다. 🎜> Python 문자 분할 함수 Split()을 쿼리합니다. 기본적으로 매개변수를 전달하지 않고 공백을 사용하여 분할할 수 있습니다. 원래는 영어 쉼표(,)를 구분자로 사용한다고 했는데 이제는 공백으로 직접 구분이 가능한 것 같습니다. 그래서 코드를 추가했습니다:
Python code
rgbColorArray = input.split() print(rgbColorArray)
3. 배열을 순회해야 합니다. 간단한 배열 순회를 수행하는 방법을 잊어버렸습니다. 같은 것을 검색했습니다:
Python 코드
for x in rgbColorArray: print(x)
4. 문자를 16진수로 변환 이때 문자열을 구해서 16진수 문자열로 변환합니다. . 이때 int()와 hex() 두 가지 함수가 필요합니다. int 함수는 문자열을 int 유형으로 변환할 수 있고, hex는 숫자 매개변수를 받아 문자열을 반환합니다. 0x로 시작하는 문자열입니다.
그래서 버전이 있습니다.
그래서 첫 번째 버전이 나왔습니다.
첫 번째 버전
첫 번째 버전
첫 번째 버전 실행 결과
이런 기본 버전을 작성하면 기본적으로 내가 원하는 것을 얻을 수 있다. 하지만 단점은 여전히 수동으로 입력해야 하고 뇌를 사용하여 16진수 색상 값을 기억한 다음 입력해야 한다는 것입니다. 최종 결과를 직접 복사할 수 있기를 바랍니다.
더 나아가 결과가 나왔지만 여전히 진전이 있었으면 좋겠습니다. 몇 가지 질문이 있습니다.
1. 변환할 숫자가 16보다 작은 경우, 한 자리만 표시되지 않습니다. 예를 들어 11의 표시된 결과는 0xB
2입니다. 실제 결과는 0x
3. 복사하기 쉽도록 결과를 한 줄로 표시하는 것보다 함께 표시하는 것이 가장 좋습니다. 각 색상마다.
그런 다음 색상 값 배열을 순회하여 0x 문자열을 제거하고 16 미만이라고 판단되면 앞에 0을 추가해야 합니다. 결과를 연속적으로 함께 출력합니다.
for 루프는 배열을 순회합니다 for 루프는 앞서 사용했던 것인데 제가 찾은 예제에서 따온 것인데 줄이 너무 많아 어떻게 해야할지 모르겠습니다. Java로 너무 많이 작성하는 경우 일반적으로 { } 중괄호로 묶입니다.
계속해서 정보를 확인해 보니 대략적으로 아래와 같이 쓰이는 것으로 확인되었습니다.
파이썬 코드
#!/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. 保存之前已经转换过的色值,方便重复使用的颜色,直接复制十六进制颜色。
위 내용은 Python을 사용한 색상 값 변환을 위한 작은 도구 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!