2

これらの定数から以下の Set fontcolor 関数に色を渡そうとしていますが、GIMP ダイアログから直接渡さない限り、毎回「色名を解析できません」というメッセージが表示されます。直接渡される変数をログに記録しました.2番の値はログからの直接コピーです. ここで私が間違っていることや欠けていることを誰でも見ることができますか。ありがとう

FontGREEN1 = '(RGB(0,255,0,))'
FontGREEN2 = 'RGB (0.0, 1.0, 0.0, 1.0)'

#This causes the error
def setColor1 ( txtlayer, color):
    color = FontGREEN1  
    pdb.gimp_text_layer_set_color(txtlayer, color)

#This causes the error
def setColor2 ( txtlayer ):
    color = FontGREEN2  
    pdb.gimp_text_layer_set_color(txtlayer, color)



#this work fine, color passed directly from GIMP Dialog
def setColor3 ( txtlayer, color):
    pdb.gimp_text_layer_set_color(txtlayer, color)

def setTextColor (img, drw, color ):
    txtlayer = img.active_layer
    setColor3(txtlayer, color)

register(
    'setTextColor',
    'Changes the color of the text with python',
    'Changes the color of the text with python',
    'RS',
    '(cc)',
    '2014',
    '<Image>/File/Change Text Color...',
    '',  # imagetypes
    [
        (PF_COLOR,"normal_color","Green Color of the Normal Font",(0,234,0)   ),
    ], # Parameters
    [], # Results
    setTextColor)
    main()
4

1 に答える 1

3

GIMP の PDB 関数に渡される Color パラメータは、文字列、またはさまざまな方法で解釈できる 3 つの数字のシーケンスです。

文字列を渡す場合、, などの CSS カラー名、"red"または「"blue" 」などの「#」を前に付けた 16 進数の RGB コードを受け入れますが、CSS 関数スタイルの構文を文字列として受け入れません。つまり、文字列として渡されません。"#ff0000"#0f0"RGB(val1, val2, val3)"

代わりに、色の値を受け入れる任意の引数として 3 つの数列を渡すことができます。3 つの数値が整数の場合、各コンポーネントの従来の 0 ~ 255 の範囲にあると解釈されます。元:

pdb.gimp_context_set_foreground((255,0,0))

前景色を赤に設定します

数値のいずれかが float の場合、3 シーケンスは 0 ~ 1.0 の範囲の RGB 数値として解釈されます。

pdb.gimp_context_set_foreground((0,0,1.0))

FG を青に設定します。

そのため、「RGB (...)」シーケンスを含む可能性のある CSS 文字列を取得した場合、それを機能させる最も簡単な方法は、「RGB」文字を取り除き、色をタプルとして解析することです。そのタプルを GIMP に送ります:

>>> mycolor = "RGB (230, 128, 0)"
>>> from ast import literal_eval
>>> color_tuple = literal_eval("(" + mycolor.split("(", 1)[-1])
>>> pdb.gimp_context_set_foreground(color_tuple)

より多くの制御が必要で、実際の「色」オブジェクトを渡すことができる場合は、GIMP プラグインからインポートできる「gimpcolor」モジュールを確認してください。ほとんどの場合は必要ありませんが、出力を生成したり、自分で色名を解析したり、単純な RGB<->HSL<->CMYK 変換を行う必要がある場合に役立ちます。(ただし、カラー プロファイルや色空間は考慮されていません。そのためには、GEGL とその Python バインディングを使用する必要があります)。

于 2014-09-22T20:49:16.720 に答える