我正在尋找一種方法來更改顏色的色調,知道它的RGB組成,然後用獲得的RGB替換舊RGB的所有實例。例如,我想要紅色變成紫色,淺紅色,淺紫色等...... 它可以通過改變顏色的色調在Photoshop中完成。使用python更改顏色的色調
我到目前爲止的想法如下:將RGB轉換爲HLS,然後改變色調。
這裏是到目前爲止的代碼(多種顏色的改變,不只是一個,在「清單」列表中定義):
(正如你可能會注意到,我只是一個初學者,代碼本身是很骯髒;更清潔的部分可能來自其他SO用戶) 非常感謝!
import colorsys
from tempfile import mkstemp
from shutil import move
from os import remove, close
def replace(file, pattern, subst):
#Create temp file
fh, abs_path = mkstemp()
new_file = open(abs_path,'w')
old_file = open(file)
for line in old_file:
new_file.write(line.replace(pattern, subst))
#close temp file
new_file.close()
close(fh)
old_file.close()
#Remove original file
remove(file)
#Move new file
move(abs_path, file)
def decimal(var):
return '{:g}'.format(float(var))
list=[[60,60,60],[15,104,150],[143,185,215],[231,231,231],[27,161,253],[43,43,43],[56,56,56],[255,255,255],[45,45,45],[5,8,10],[23,124,193],[47,81,105],[125,125,125],[0,0,0],[24,24,24],[0,109,166],[0,170,255],[127,127,127]]
for i in range(0,len(list)):
r=list[i][0]/255
g=list[i][1]/255
b=list[i][2]/255
h,l,s=colorsys.rgb_to_hls(r,g,b)
print(decimal(r*255),decimal(g*255),decimal(b*255))
h=300/360
str1=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))
r,g,b=colorsys.hls_to_rgb(h, l, s)
print(decimal(r*255),decimal(g*255),decimal(b*255))
str2=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))
replace("Themes.xml",str1,str2)
編輯:問題是非常簡單的:R,G,B和H必須是0和1之間,我是0和更新後的代碼之間和255 0和360設置它們。
你使用Python 3嗎?否則'/'表示一個整數除法,而不是'from __future__ import division' – jfs
謝謝你指出。 – GermainZ