2019/12/31(火) [n年前の日記]
#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
◎ 参考ページ。 :
[ ツッコむ ]
以上です。