1

GIMP のデフォルトのロゴ スクリプトの 1 つを書き直す際に問題が発生しています (スキームに基づく Script-fu を使用)。1 つには、画像が表示された後、レイヤー ブラウザにアルファ レイヤーが表示されません。Create Neon Logo スクリプト (neon-logo.scm) を書き直しています。新しい画像を表示する前に、次の処理を実行します。

  1. アルファチャンネルを追加
  2. colortoalpha を介して黒 (背景色) を透明に変更します
  3. 生成された画像を別の Python スクリプトで使用するオブジェクトとして返します (for ループを使用して 49 の画像を生成します) 次のコードをデフォルトのスクリプトに変更しようとしました:

        (gimp-image-undo-disable img)
        (apply-neon-logo-effect img tube-layer size bg-color glow-color shadow) *Generates neon logo
        (set! end-layer (car (gimp-image-flatten img))) *Flattens image
        (gimp-layer-add-alpha end-layer) *Adds alpha layer as last layer in img(img=the image)
        (plug-in-colortoalpha img 0 (255 255 255)) *Uses color to alpha-NOT WORKING
        (gimp-image-undo-enable img) *Enables undo
        (gimp-display-new img) *Displays new image
    

3番目の私のpythonコードは次のとおりです。

        for str1 in list1:
            for color1 in list3:
                img = pdb.script_fu_neon_logo(str1,50,"Swis721 BdOul BT",(0,0,0),color1,0)

しかし img は「Nonetype」オブジェクトです。生成された画像を新しいウィンドウに表示する代わりに、Pythonスクリプトで使用するために生成された画像を返すようにしたいと思います。誰でも助けることができますか?

4

1 に答える 1

1

おそらく、すべてをより管理しやすく読みやすくするために、元のスクリプトを Python に変換する必要があります。そうすれば、変数の代入やシーケンスからの要素の選択など、ささいなことに驚くことはありません。

1および2)「アルファチャネルを追加する」(「アルファレイヤー」ではなく、「アルファレイヤー」ではない)を画像に平坦化するための呼び出しは明らかに正しいですが、白(255 255 255) 黒ではなく透明。それを (0 0 0) に変更してみてください - うまくいかない場合は、script-fu コンソールまたは python コンソールでそれぞれの呼び出しを個別に行い、何が問題なのかを確認してください。

3) script-fu は呼び出し元に値を返すことができません (これは、レジスタ呼び出しに「戻り値の型」パラメーターがないことからわかるように)。つまり、GIMP のスキーム内のスクリプトは、自分自身でしかレンダリングできず、そうではありません。より複雑なチェーンを構成するために使用されます。

これにより、2 つのオプションが残ります。元のスクリプトを Python-fu に移植します (そして、PF-IMAGE を返すように登録するだけです)。または、Python で次のように呼び出しをハックします: すべての画像を開いたセットを作成し、 script-fu、現在開いている画像のどれが以前に開いた画像のセットにないかを確認します-それが新しい画像になります:

これのトリッキーな部分は、Python-fu から見たときに画像に一意の識別子がないことです。そのため、(name, number_of_layers, size) のような値を構成して、それらの比較セットを実行する必要があります。または、「パラサイト」(画像に添付できる任意のデータ) を操作することもできます。ご覧のとおり、すべての作業は PDB 呼び出しによって行われ、これらは 1:1 で変換されるため、元の script-fu を Python で書き直した方が望ましいです。

于 2013-03-18T12:25:35.717 に答える