2019/12/31(火) [n年前の日記]
#1 [gimp] GIMPの全レイヤーを画像保存するスクリプトについてメモ
GIMPの全レイヤーを、それぞれ別の画像ファイルとして保存する方法についてメモ。基本的には、Python-Fu (GIMP-Python)、もしくは Script-Fu のスクリプトを追加すればできるようになります。
動作確認環境は Windows10 x64 1909 + GIMP 2.10.14 Portable x86 samj版。
動作確認環境は Windows10 x64 1909 + GIMP 2.10.14 Portable x86 samj版。
◎ Export Layers プラグイン。 :
今時は Python-Fu で実装された高機能なプラグインが存在するので、まずはそちらをおススメ。
_Home | Export Layers
_khalim19/gimp-plugin-export-layers: GIMP plug-in that exports layers as separate images
呼び出し方は、ファイル → Export Layers ...。
実行すると、どの場所に保存するか尋ねてくるダイアログが開くので…。
Settings をクリックして Show More Settings を選べば、オプション指定部分が増えます。
ファイル名の部分をクリックすれば、レイヤー名で保存(Layer name)、連番で保存(image001)、等が選べます。
_Home | Export Layers
_khalim19/gimp-plugin-export-layers: GIMP plug-in that exports layers as separate images
- レイヤー名をファイル名に、あるいは、連番ファイル名にして保存できる。
- 保存する前に、各レイヤーがどんなファイル名で保存されるのか、一覧表示してくれる。
呼び出し方は、ファイル → Export Layers ...。
実行すると、どの場所に保存するか尋ねてくるダイアログが開くので…。
Settings をクリックして Show More Settings を選べば、オプション指定部分が増えます。
ファイル名の部分をクリックすれば、レイヤー名で保存(Layer name)、連番で保存(image001)、等が選べます。
◎ たむぶん版 Continuous Save。 :
いっちー氏が作成した Script-Fu に機能追加された版。GIMP 2.10.x まで対応済み。レイヤーを連番画像(bmp/png/jpg)として保存することが可能。
_たむぶん版 Continuous Save
何らかの理由で Export Layers を使いたくない・動かない場合は、こちらのスクリプトがおススメ。
導入すると、Script-Fu → Utils → Continuous Save...、で使えるようになります。
_たむぶん版 Continuous Save
何らかの理由で Export Layers を使いたくない・動かない場合は、こちらのスクリプトがおススメ。
導入すると、Script-Fu → Utils → Continuous Save...、で使えるようになります。
◎ mieki256版 Continuous Save。 :
前述のプラグイン/スクリプトで十分目的は果たせるし、自分も最近は Export Layers を使っていますが…。
一応、自分も、いっちー氏 + たむぶん氏が作成した版に多少手を入れたスクリプトを手元に置いていたりするので、念のためにソレも置いておきます。GIMP 2.8、GIMP 2.10 に対応。GIMP 2.6 には未対応。
_continuous-save_m256.scm
導入すると、Script-Fu → Utils → Continuous Save (m256)...、で使えるようになります。
ですが、たむぶんさんの版より機能が少ない(レイヤーサイズを一括変更する機能が無い)ので、コレを使うメリットは無いですね…。
一応、自分も、いっちー氏 + たむぶん氏が作成した版に多少手を入れたスクリプトを手元に置いていたりするので、念のためにソレも置いておきます。GIMP 2.8、GIMP 2.10 に対応。GIMP 2.6 には未対応。
_continuous-save_m256.scm
導入すると、Script-Fu → Utils → Continuous Save (m256)...、で使えるようになります。
ですが、たむぶんさんの版より機能が少ない(レイヤーサイズを一括変更する機能が無い)ので、コレを使うメリットは無いですね…。
◎ 余談。全レイヤーのサイズを一括変更。 :
手元の環境で使っている、全レイヤーのサイズを一括変更するスクリプトも、一応紹介。
_all-layers-resize-autocrop_gimp28.scm
レイヤー → All Layers、の中に、以下の2つが追加されます。
当時、GIMP 2.6、2.8 に対応させたはずですが、手元の環境では GIMP 2.10 上でも動いてます。
_all-layers-resize-autocrop_gimp28.scm
レイヤー → All Layers、の中に、以下の2つが追加されます。
- 全レイヤーの自動切り抜き
- 全レイヤーを画像サイズに合わせる
当時、GIMP 2.6、2.8 に対応させたはずですが、手元の環境では GIMP 2.10 上でも動いてます。
[ ツッコむ ]
#2 [gimp] GIMP 2.10のソリッドノイズ
GIMP 2.10.14 Portable x86 samj版でソリッドノイズフィルタを使おうとしたら、フィルタメニューの中に見当たらず。下塗り → 雲、の中にあったような気がするのだけど…。
下塗り → ノイズ → ソリッドノイズ、という場所にあったのだな。一応メモ。
GIMP 2.8.22 Portable を起動してみたら、そちらでは、下塗り → 雲、の中にソリッドノイズがあった。記憶が間違ってたわけではないらしい。GIMP 2.10 になって、下塗り → ノイズ、というサブメニューが追加されて、登録場所が変わったのだろう。たぶん。
下塗り → ノイズ → ソリッドノイズ、という場所にあったのだな。一応メモ。
GIMP 2.8.22 Portable を起動してみたら、そちらでは、下塗り → 雲、の中にソリッドノイズがあった。記憶が間違ってたわけではないらしい。GIMP 2.10 になって、下塗り → ノイズ、というサブメニューが追加されて、登録場所が変わったのだろう。たぶん。
[ ツッコむ ]
#3 [gimp] Script-FuでGIMPのバージョンを調べる
GIMP 2.8 からレイヤーグループが追加されたことで、Script-Fu を使ってレイヤー関係の処理を書く際には、以下を意識して書いてあったりすると助かる場面もあるのだけれど。
そのためには、「GIMP 2.8以上か? 未満か?」を、Script-Fu を使って判定しないといけない。そのあたりの処理をどう書けばいいのか実験してみたり。
動作確認環境は以下。
- GIMP 2.4 や GIMP 2.6 で動かしてるなら、グループレイヤーが無いことを前提に処理。
- GIMP 2.8 や GIMP 2.10 で動かしているなら、グループレイヤーが有るかもしれないことを前提にして処理。
そのためには、「GIMP 2.8以上か? 未満か?」を、Script-Fu を使って判定しないといけない。そのあたりの処理をどう書けばいいのか実験してみたり。
動作確認環境は以下。
- Windows10 x64 1909
- GIMP 2.10.14 (2.10.15?) Portable x86 samj版
- GIMP 2.8.22 Portable
- GIMP 2.6.12 公式バイナリ版
◎ GIMP 2.10.14上で動作確認。 :
以下は、GIMP 2.10.14 Portable x86 samj版で、Script-fuコンソールを表示して確認した結果。
GIMP 2.8 以上なので、#t が返ってきた。
; GIMPのバージョンは (gimp-version) で取得できる > (gimp-version) ("2.10.15") ; 配列(リスト?)の中にバージョン文字列が入ってるので、文字列だけを取り出す ; car を使うと、配列の一番最初の要素を取り出せる > (car (gimp-version)) "2.10.15" ; 文字列を特定文字で区切って配列にする。strbreakup が使える ; (strbreakup 文字列 区切り文字) の形で使う > (strbreakup (car (gimp-version)) ".") ("2" "10" "15") ; 文字列が入ってる配列の中から1つだけ取り出すには nth を使う ; (nth インデックス番号 配列) の形で使う > (nth 0 (strbreakup (car (gimp-version)) ".")) "2" > (nth 1 (strbreakup (car (gimp-version)) ".")) "10" > (nth 2 (strbreakup (car (gimp-version)) ".")) "15" ; 文字列を数値に変換するには string->number を使う ; (string->number 文字列) の形で使う > (string->number (nth 1 (strbreakup (car (gimp-version)) "."))) 10 ; 2.8 以上か未満かを知りたいので値を比較。#t か #f が返ってくる。 > (<= 8 (string->number (nth 1 (strbreakup (car (gimp-version)) ".")))) #t
GIMP 2.8 以上なので、#t が返ってきた。
◎ GIMP 2.8.22上で動作確認。 :
以下は、GIMP 2.8.22 Portable で確認した結果。
GIMP 2.8 以上なので、#t が返ってきた。
> (gimp-version) ("2.8.22") > (car (gimp-version)) "2.8.22" > (strbreakup (car (gimp-version)) ".") ("2" "8" "22") > (nth 0 (strbreakup (car (gimp-version)) ".")) "2" > (nth 1 (strbreakup (car (gimp-version)) ".")) "8" > (nth 2 (strbreakup (car (gimp-version)) ".")) "22" > (string->number (nth 1 (strbreakup (car (gimp-version)) "."))) 8 > (<= 8 (string->number (nth 1 (strbreakup (car (gimp-version)) ".")))) #t
GIMP 2.8 以上なので、#t が返ってきた。
◎ GIMP 2.6.12上で動作確認。 :
以下は、GIMP 2.6.12 で確認した結果。
GIMP 2.8 未満なので、#f が返ってきた。
ということで、2.6以下なら #f が、2.8以上なら #t が返ってくることが確認できた。
> (gimp-version) ("2.6.12") > (car (gimp-version)) "2.6.12" > (strbreakup (car (gimp-version)) ".") ("2" "6" "12") > (nth 0 (strbreakup (car (gimp-version)) ".")) "2" > (nth 1 (strbreakup (car (gimp-version)) ".")) "6" > (nth 2 (strbreakup (car (gimp-version)) ".")) "12" > (string->number (nth 1 (strbreakup (car (gimp-version)) "."))) 6 > (<= 8 (string->number (nth 1 (strbreakup (car (gimp-version)) ".")))) #f
GIMP 2.8 未満なので、#f が返ってきた。
ということで、2.6以下なら #f が、2.8以上なら #t が返ってくることが確認できた。
◎ そもそもこういう処理は要らないかも。 :
今時 GIMP 2.6 以前を使ってる人がそれほど居るとも思えないし、このあたりの処理は要らないのかもしれない…。「このスクリプトは GIMP 2.8以降のみ対応」「GIMP 2.6以前には未対応」等の注意書きでも示しておけば済みそうだし。
でもまあ、一つのスクリプトで、GIMP 2.10 と GIMP 2.8 の両方に対応させたい場面があるかもしれないし。そんな場面では、こういうソレが使えなくもないのかな…。
ただ、将来的に、GIMP 3.0 等のバージョン番号が出てきちゃった時には困るかもしれない。
でもまあ、一つのスクリプトで、GIMP 2.10 と GIMP 2.8 の両方に対応させたい場面があるかもしれないし。そんな場面では、こういうソレが使えなくもないのかな…。
ただ、将来的に、GIMP 3.0 等のバージョン番号が出てきちゃった時には困るかもしれない。
◎ substringを使う方法。 :
比較に使う文字列が決め打ちになるけれど、文字列の切り出しを行う substring でやれなくもないなと。一応メモ。
> (gimp-version) ("2.10.15") > (car (gimp-version)) "2.10.15" > (substring (car (gimp-version)) 0 4) "2.10" > (string=? "2.10" (substring (car (gimp-version)) 0 4)) #t > (string=? "2.8." (substring (car (gimp-version)) 0 4)) #f > (string=? "2.6." (substring (car (gimp-version)) 0 4)) #f
> (gimp-version) ("2.8.22") > (string=? "2.10" (substring (car (gimp-version)) 0 4)) #f > (string=? "2.8." (substring (car (gimp-version)) 0 4)) #t > (string=? "2.6." (substring (car (gimp-version)) 0 4)) #f
> (gimp-version) ("2.6.12") > (string=? "2.10" (substring (car (gimp-version)) 0 4)) #f > (string=? "2.8." (substring (car (gimp-version)) 0 4)) #f > (string=? "2.6." (substring (car (gimp-version)) 0 4)) #t
◎ 参考ページ。 :
[ ツッコむ ]
#4 [nitijyou] 弟が帰省
PM06:00過ぎ頃に到着。
高速道路は混雑していなかったけど、車体が持っていかれそうなぐらいに風が強かった、との話。
高速道路は混雑していなかったけど、車体が持っていかれそうなぐらいに風が強かった、との話。
[ ツッコむ ]
以上、1 日分です。