GIMP Python-fu 拡張③
~ 拡張形式による OpenRaster の読み書き ~
OpenRaster(.ora) ファイルは MyPaint のファイル形式としてご存知の人も多いかと思いますが、元々は PSDファイル(Adobe PhotoShopファイル)に代わるオープンなファイル規格として誕生したものであり、MyPaint では利用されていない表現方法も含まれています。
ところが Krita が OpenRaster をサポートした事により状況が変化しつつあります。その一つがグループレイヤーの対応です。
そこで、グループレイヤーに対応した OpenRaster 読み書き GIMP プラグインを作成しました。
※ このプラグインは完全な互換性を提供するものではありません。そもそも GIMP と Krita では存在するレイヤーモードが違うため、完全互換は不可能です。
※ このプラグインは、GIMP 2.8 以上を対象としています。
※ 動作の確認は、全て Fedora で行なっていますが、その他の Linux でも大差は無いと思われます。
※ Windows や MacOSX で利用する場合はまず、Python の動作確認をきちんと行なってからにして下さい。
ダウンロード
以下のリンクからダウンロードを行なって下さい。
スクリプトのダウンロード(GIMP 2.8 以降)
※ インストール方法などは、コチラを参照して下さい。
※ このスクリプトを使用して発生した問題に関し、作成者は如何なる保証などを行う事はありません。自己責任でのみの使用を許可します。
『OpenRaster 拡張された形式の読み込み』の操作方法
※ メニュー『ファイル』>『画像の生成』>『拡張読み込み』>『OpenRaster 拡張された形式の読み込み』に組み込まれます。

- 『対称のファイルを指定して下さい。(.ora)』 … 対象となる OpenRaster(.ora)ファイルを選択。
- 『SVGをパスとして読み込み』 … ora ファイルに含まれる SVG をパスとして読み込みます。(ただし、「svg:dst-in」や「svg:dst-out」など、マスクとして指定されているモノは除かれます。)MyPaint 1.2 の .ora を読み込む場合は、『しない』にして下さい。
- 『空のグループを削除』 … 空のグループは削除されます。
- 『グループ内に1項目しか存在しない場合は上位へ移動』 … グループ内にレイヤーが1つしかない場合は、1つ上の階層に移動します。
- 『グループに Source Atop が設定されている場合は上位へ移動』 … MyPaint 1.2 の .ora を読み込む場合は、『する』にして下さい。(MyPaint 1.2 のクリッピング機能を擬似的に再現する為には必要です。)
※ MyPaint 1.2 のクリッピング機能や、Krita の .ora にも対応しています。
『OpenRaster 拡張された形式の書き込み』の操作方法
※ メニュー『ファイル』>『拡張書き込み』>『OpenRaster 拡張された形式での保存』に組み込まれます。

- 『ファイル名を指定して下さい。(.ora)』 … 保存するファイル名を指定して下さい。(指定が無くイメージがファイル名を持っている場合、そのファイル名に「.ora」が付加されたモノがになります。)
- 『保存先を指定して下さい。』 … 保存先のディレクトリを指定して下さい。(指定が無くイメージがファイル名を持っている場合、そのファイルの格納ディレクトリが指定されます。)
- 『レイヤーマスクを保存』 … レイヤーマスクを「svg:dst-in」で保存します。対応していないアプリケーションで読み込んだ場合、正しく表示されなくなります。
- 『パスを保存 … パスを SVG で非表示のレイヤーとして保存します。
- 『ファイルの上書きを許可』 … ファイルが既に存在する場合、一旦削除してから保存を行います。
Krita からの読み込み
Krita は CMYK 形式の PSD ファイルが読み込めるなど、利点も多い。そこで先ず、Krita での OpenRaster への書き込みを説明します。
Kirta で次の様なレイヤー階層を持ったファイルがあるとします。

メニュー『File』>『Save As…』で保存ダイアログを表示します。

『File name』に拡張子が ora のファイルを指定。
『File of type』」で『image/openraster』(MIMEタイプでのOpenRaster)を選択します。
保存したファイルをこのプラグインを使用して開きます。(設定はデフォルトのままで構いません)

レイヤー構成が再現されているのが確認出来るかと思います。
Krita への書き出し
Krita へ書き出す場合は、注意が必要です。レイヤーモードの関係もありますが、グループレイヤーの動作が違います。まずは次の画像を見てください。

グループ内で上がレイヤーモードを『乗算(Multiply)』にした場合。
- GIMP … 乗算の効果はグループ内に限定
- Krita … 乗算の効果はグループ外にも影響
これらの影響により、見え方が異なります。そこでこの様な場合はレイヤーマスクなどを利用して差異が発生しないようにする必要があります。
※ レイヤーマスク作成を支援するスクリプトを配布しています。詳しくはコチラをご覧下さい。
また、Kritaには「微粒結合」や「微粒取り出し」などのレイヤーモードは存在しません。
以上のことを注意してこのプラグインを使用して保存します。(設定はデフォルトのままで構いません)
※ Krita では SVG ファイル(パス)やテキストレイヤーはラスタ化されますので注意が必要です。
『レイヤーグループクリッピング』の操作方法
Krita で作成した次の様な画像があるとします。

OpenRaster で保存後、このプラグインで読み込んだ場合、次の様な状態になる事があります。

コレは、Krita のクリッピング機能が保存された OpenRaster では有効に機能していない事が原因です。

そこでグループ最下部レイヤーでグループ内のレイヤーをクリップする事を目的とした機能です。
レイヤーグループを選択した状態で、メニュー『レイヤー』>『レイヤー操作(Python-fu)』>『レイヤーグループクリップ(Python)』を選択してダイアログを表示します。

- 『再帰的にレイヤーグループを走査する』 … 再帰的にレイヤーグループを処理します。
- 『レイヤーマスクを参照する』 … レイヤーマスクが設定されている場合は、アルファチャンネルに加え、レイヤーマスクも対称としたクリッピングを行います。
- 『非表示レイヤーをスキップする』 … 非表示のレイヤーやレイヤーグループをスキップします。
※ レイヤーグループの最下端がノーマルレイヤーでない場合は、クリッピングの対称になりません。
※ レイヤーグループが不可視で、『非表示レイヤーをスキップする』が指定されている場合は、グループ自体がクリッピングの対象にはなりません。
この機能を利用すれば、Krita クリッピングでの表示を再現できます。

GIMP と Krita の連携に苦労している人は、試して見てはどうでしょうか?


