2019年1月27日日曜日

GIMP 2.10.8 Python GroupLayer Trouble

現行の GIMP 2.10.8 では、Python で Group Layer を扱えない問題が有ります。
GNOME に報告した処、同日(即日!)に Developer の Ell さまが 該当ファイルの修正をして下さり、
問題解決となりました。  Ell さまに 感謝 !。
以下に詳細や 対応方法を。


再び になりますが、
GIMP Developer の Ell さまに 感謝!。


現象。  GIMP 2.10.8

Group Layer を 選択した状態で、 Python Script を実行すると、
その Dialog から OK ボタンを押した途端、以下のメッセージでストップします。
TypeError: can't pickle GroupLayer objects 

   GIMP に同梱された Fog Filter で表示される Message の例。
   Filters > Decor... > Fog...  (Open python-fu-foggify Dialog).





結論。  以下、Ell さま の Commit 群の中から抜粋。

d11d094d (代表的なもの)
https://gitlab.gnome.org/GNOME/gimp/commit/d11d094d020a3b255f748cbbd753e03e4a6bdf4d
GIMP > commit > d11d094d

Issue #1119 - Unable to give a layer group as a parameter to a python script

Pickle gimp.GroupLayer the same way we pickle gimp.Layer, so that
layer-group parameters can be properly saved.

All credit goes to Ofnuts :)

(cherry picked from commit b295a33a)


Detail (Not Python Code,  html Base)

Showing with 6 additions and 5 deletions
plug-ins/pygimp/gimpshelf.py

   @@ -53,11 +53,12 @@ def _display_id(obj):
   def _vectors_id(obj):
       return gimp._id2vectors, (int(obj.ID),)

-  copy_reg.pickle(gimp.Image,   _image_id,    gimp._id2image)
-  copy_reg.pickle(gimp.Layer,   _drawable_id, gimp._id2drawable)
-  copy_reg.pickle(gimp.Channel, _drawable_id, gimp._id2drawable)
-  copy_reg.pickle(gimp.Display, _display_id,  gimp._id2display)
-  copy_reg.pickle(gimp.Vectors, _vectors_id,  gimp._id2vectors)
+  copy_reg.pickle(gimp.Image,      _image_id,    gimp._id2image)
+  copy_reg.pickle(gimp.Layer,      _drawable_id, gimp._id2drawable)
copy_reg.pickle(gimp.GroupLayer, _drawable_id, gimp._id2drawable)
+  copy_reg.pickle(gimp.Channel,    _drawable_id, gimp._id2drawable)
+  copy_reg.pickle(gimp.Display,    _display_id,  gimp._id2display)
+  copy_reg.pickle(gimp.Vectors,    _vectors_id,  gimp._id2vectors)

   del copy_reg, _image_id, _drawable_id, _display_id, _vectors_id

Ell @ell  mentioned in issue #1119 (closed)


さて、
GIMP 2.10.8 に対する対応方法です。

(恐らく、次期 2.10.10 では commit が反映され、以下の対策は不要と思われます。)


問題は gimpshelf.py の修正で回避されます。
つまり、 次期の更新反映を待たずに、ファイルの入れ替えで、2.10.8 でも、問題回避が可能です。

該当ファイルの 標準インストール時の 完全パス は 以下の通りです。  OS : Windows

C:\Program Files\GIMP 2\32\lib\gimp\2.0\python\gimpshelf.py

先ずは、この既存ファイルを (念の為) リネームして残して置きます。
                   例 : gimpshelf.py.old.2.10.8
その上で、

以下の https://gitlab.gnome.org にある 公式ページから 更新済みファイル を入手します。

gimpshelf.py  from
https://gitlab.gnome.org/GNOME/gimp/raw/b295a33aafe122f318e591546c1a2a9217fd19af/plug-ins/pygimp/gimpshelf.py?inline=false

Download 後のファイル情報は以下の通りです。

FileName : gimpshelf.py
FileDate : 2019/01/27 7:11:12     ( or * Downloaded Date * )
FileSize : 2910    (3KB)
   MD5 : f5d4276f529b808aecbec1935c402f6a
  SHA1 : 9223d99a982226e4b190276b6fdb583515065cae
 HA256 : be9bba5deefc142c1951a7f05f6568e2c1c4c152924c1897297462a6f6507e55

一応、OS の Explorer Propaty から、
インターネット取得時の ブロック 解除 (許可)を行って下さい。

  或いは、1行の挿入ですから、
  専用エディタがあれば、上記を参考に 、直接編集してしまう手もあります。

該当ファイルを入れ替えます。  コピー若しくは移動。
  場所(再掲) C:\Program Files\GIMP 2\32\lib\gimp\2.0\python

勿論、この場所は C:\Program Files 配下ですので、 管理者権限での 実行 許可 が必要です。
それを守らないと、リダイレクト機能が働き、正規の場所ではない所に飛ばされてしまいますので、
ご注意!を。  (これでは、意味が無く、GIMP も 更に 狂います。)

  参考投稿 URL : PC program files リダイレクト先
  


これらの作業を経て、めでたく、正常化!。
万歳。  万歳三唱!。



0 件のコメント:

コメントを投稿