以前、黄変ネガ写真の補正術の説明でGIMPはPhotoshopと異なり調整レイヤー概念がなく、画像 (塗りつぶし) レイヤーしかないので、疑似非破壊画像編集法を考える必要があると述べました。で、その際、色域選択を使って選択した範囲を、新規レイヤーに貼り付けることで、色域選択した以外の領域が透明なレイヤーを作り、これを使って色調補正を行うことで、疑似非破壊画像編集が可能になると示しました。
ただ、この作業がちょっと面倒です。なので選択範囲を、そのまま範囲以外が透明な新規レイヤーに転換するプラグインを作ろうと思いました。Photoshopなどでは、選択範囲をコピーして貼り付けると、デフォルトで新規レイヤーとして貼りつくようになっているので*1、いわばそれをGIMP上で実現しようというわけです。
とはいえ、取得した選択範囲からどうやって画像データのコピーを取るのかか分からなくて手法をネットで検索していたところ、何とドイツの方で、既に同じプラグインを考えていた人がいました... (-_-;)
そのままパクって、自分が作りましたというのはフェアではないのでこちらに紹介します。以下のリンクをクリックしてください。
/selection_to_layer_cropped.py
ここにあるコードをテキストエディタ等にコピーして、改行コードをLFにして、GIMPのプラグインフォルダに保存すると利用できます。あるいは、download zip ボタンを押して、ダウンロードし、解凍して利用してもOKです。GIMPのメニューの[フィルター]の下の方に、[Selection to Layer (Cropped)...] という名前で出てきます。
で、このまま使っても良いのですが、やはり日本語になっていない点や、メニュー上での位置が気になります。そこでこのコードを日本語環境向けにアレンジする方法を指南します。
1) まず、テキストエディタで保存するときに文字コードを UTF-8 (+ 改行コード LF) で保存してください。
2) 1行目と2行目の間に日本語を使うために以下の行を挿入します。
# -*- coding: utf-8 -*-
これで日本語が使えます。
3) メニューの位置の変更と、表示を日本語にするために、26行目を以下のように書き換えます。
旧:
"<Image>/Filters/Selection to Layer (cropped)...",
新:
"<Image>/Layer/New/選択範囲を新規レイヤーに...",
これで、メニューの[レイヤー]の下に表示されるようになります。もしメニューの[選択] の下に表示させるのがお好みなら /Layer/New/ を /Select/ に変えてみてください。
4) ダイアログの表示を日本語に変えるために、21行目と29行目を以下のように変えます。
旧:
21行目
"Create new layer from selection and auto crop layer",
29行目
(PF_STRING, "layer_name", "Name for new layer", ""),
新:
21行目
"選択範囲から新規レイヤー作成",
29行目
(PF_STRING, "layer_name", "新規レイヤー名", ""),
以上のように書き換え、GIMPのプラグインフォルダにコピーすることで、GIMPメニューの[レイヤー]の比較的上の方に、[選択範囲を新規レイヤーに...] という名前でこのプラグインがメニューに出てきて、ダイアログも日本語表示になります。
なお、GIMPのプラグインフォルダは、Windowsの場合下記になります。
C:\Users\%username%\AppData\Roaming\GIMP\2.10\plug-ins
(特定のユーザのみ使えるようにする場合)
または、
C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins
(どのユーザでも使えるようにする場合)
他のプラットフォームやバージョンが異なる方、デフォルトの設定を変更している方の場合、プラグインを置くフォルダーは、メニュー→[編集]→[設定]→[フォルダー]→[プラグイン]で確認できます。あるいはネットで検索してみてください。
----
ところで fre-sch氏はこのコードをどのように書いているかというと、単純に現在アクティブなレイヤー (選択範囲情報が含まれている) を複製し、複製した新規レイヤーに対して、plug_in_autocrop_layer() という選択範囲以外を透明化するプロシジャーを適用しているようです。そんなのあったのか...
私は、範囲選択関連のプロシジャーをあちこち調べてああでもない、こうでもないとやっていたのですが、範囲選択関連のプロシジャーを使うまでもなかったということでしたOLZ...