カスタム gimpfu プラグインを使用して、GIMP(v2.8.10) レイヤーの操作をプログラムで実験してきました。既存のレイヤーの一部を動的に選択、回転、スケーリング、および変換することに成功しました。
プラグイン内のコードの一部:
関連性のために簡略化されています。これらの指示はすべて機能します。
# I only use one layer in the probe image
layer = img.layers[0]
selection = pdb.gimp_rect_select(img, init_coords[0], init_coords[1],
my_width,my_height,2,0,0)
# Copy and paste selection
pdb.gimp_edit_copy(layer)
float_layer = pdb.gimp_edit_paste(layer, 1)
# Transform floating selection step by step
float_layer = pdb.gimp_item_transform_rotate_simple(float_layer,
ROTATE_90, 1, 0, 0)
float_layer = pdb.gimp_layer_scale(float_layer, new_width,new_height, 1)
float_layer = pdb.gimp_layer_translate(float_layer, h_offset, 0)
問題
- 最後の行 ( ) を削除すると、
gimp_layer_translate
他のすべてが機能します。 - それ以外の場合は、代わりに含まれている行を削除すると、
gimp_layer_scale
他のすべてが機能します。 - しかし、これらすべての機能を一緒に使用しようとすると、
gimp_layer_translate
クラッシュしますRuntimeError
プロシージャ gimp-layer-translate が呼び出され、«layer» 引数の ID が正しくありません。存在しないレイヤーを操作しようとしている可能性があります。
なぜこのように失敗するのかわかりません。彼らが個別に働くなら、なぜ一緒に働かないのですか?私は疑問に思う。
参考文献
コードを「元に戻すブロック」に囲むためのしっかりした構造を持っているように見えるため、プラグインを構築するための出発点として、私template.py
はgimpbook.comから始めます。私の主な情報源はpdb
、Google で見つけたこのウェブサイトです。また、この質問で必要な手順をいくつか見つけました。
また、私の以前の質問の 1 つが、 gimp 用のカスタム プラグインの作成を開始する方法の参考になるかもしれません。
何が私を行き詰まらせているのか
原因が gimp のバグなのか、コードの実装が間違っているのかはわかりません。リンクされた質問への回答に投稿されたコードの一部が原因で、利用可能なメモリを使いすぎているかどうか疑問に思っています (結局のところ、特定のプロシージャ コールでオブジェクトを破棄しなければならないことがわかるまで知りませんでした)その答えで)。それらを削除しないとどうなりますか? 私は疑問に思う。それらは GIMP を閉じるまで RAM に残りますか、それとも GIMP システムをあふれさせる永続的なファイルを生成しますか? 正直なところ、この問題を無視した場合の結果についてはわかりません。