2

色のトーンを変更し、それが RGB 構成であることを知ってから、古い RGB のすべてのインスタンスを取得した RGB に置き換える方法を探しています。たとえば、赤を紫にしたい、薄い赤にしたい、薄い紫にしたい... Photoshop で色相を変えることで実現できます。

私がこれまでに考えたことは次のとおりです。RGB を HLS に変換してから、色相を変更します。

これまでのコードは次のとおりです (「リスト」リストで定義されている 1 つだけでなく、複数の色が変更されます)。

(お気づきかもしれませんが、私は初心者であり、コード自体はかなり汚れています。よりクリーンな部分は、おそらく他の 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 の間に設定していました。コードを更新しました。

4

1 に答える 1

2

色のシーケンスは整数を使用していますがcolorsys、0.0 から 1.0 の間の浮動小数点値を使用しています。すべての数値を255.で割ってから、255 を掛けて、元に戻した後に切り捨てます。

于 2012-06-16T14:07:50.873 に答える