2026/04/07(火) [n年前の日記]
#1 [gmic] G'MICのフィルタの作り方を勉強中。その8
G'MIC用のフィルタを作ってみたい。作り方について勉強中。
環境は Windows11 x64 25H2 + GIMP 2.10.38 Portable + G'MIC-Qtプラグイン 3.7.4。
環境は Windows11 x64 25H2 + GIMP 2.10.38 Portable + G'MIC-Qtプラグイン 3.7.4。
◎ G'MICでレイヤーを指定回数回転させる :
GIMP + G'MIC-Qtプラグインを使って、入力画像(入力レイヤー)を指定回数回転させたい。
何百種類もフィルタを持っている G'MIC のことだから、既にこういう処理をするフィルタもありそうだけど、G'MICでフィルタを作成する際の練習問題にはなるんじゃないかなあと…。以前 GIMP + Python-Fu で似た処理をするプラグインを書いたけれど、G'MIC でも同じことができるかどうかも気になるし…。
_mieki256 wiki - GIMPの全レイヤーを円状に配置するスクリプト
G'MICなら、こんな感じかなあ…。
注意点。アルファチャンネルを使って合成してるので、RGBA画像/アルファチャンネルを持っているレイヤーを入力画像にしないと期待した結果が得られない。
G'MIC-Qtプラグインに登録するならこんな感じになるだろうか。
_fx_m256_multiple_rotations.gmic
何百種類もフィルタを持っている G'MIC のことだから、既にこういう処理をするフィルタもありそうだけど、G'MICでフィルタを作成する際の練習問題にはなるんじゃないかなあと…。以前 GIMP + Python-Fu で似た処理をするプラグインを書いたけれど、G'MIC でも同じことができるかどうかも気になるし…。
_mieki256 wiki - GIMPの全レイヤーを円状に配置するスクリプト
G'MICなら、こんな感じかなあ…。
cnt=6 # 回数を指定
[0]x{$cnt-1} # 入力画像をn枚複製
ang={360/$cnt} # 角度の増分を得る
repeat $! # 画像スタック数分ループ。画像スタック数は $! で、ループインデックス値は $> で得られる
if $>!=0
rotate[$>] {$ang*$>},1,0,50%,50% # 画像の中心を軸として回転
fi
done
blend alpha # 画像スタック全部をアルファチャンネルで合成
注意点。アルファチャンネルを使って合成してるので、RGBA画像/アルファチャンネルを持っているレイヤーを入力画像にしないと期待した結果が得られない。
G'MIC-Qtプラグインに登録するならこんな感じになるだろうか。
- Windows環境の場合、C:\Users\(ユーザ名)\user.gmic に追記すれば使えるようになる。
- あるいは G'MIC-Qtプラグインの Settings で *.gmic を追加する。
- My Filters → m256 multiple rotations を選べば利用できる。
_fx_m256_multiple_rotations.gmic
#----------------------------------------
# m256 multiple rotations
# Author : mieki256 , 2026/04/07, License : CC0
#@gmic
#@gui ____<b>My Filters</b>
#@gmic fx_m256_multiple_rotations : Count, Interpolation, Boundary_conditions
#@gmic : Multiple rotations. Only RGBA images are supported.
#@gui m256 multiple rotations : fx_m256_multiple_rotations, fx_m256_multiple_rotations_preview(0)
#@gui : note = note("Multiple rotations. Only RGBA images are supported.")
#@gui : sep = separator()
#@gui : Count = int(6, 2, 256)
#@gui : Interpolation = choice(1, "None", "Linear", "Bicubic")
#@gui : Boundary conditions = choice(0, "Dirichlet", "Neumann", "Periodic", "Mirror")
#@gui : sep = separator()
#@gui : note = note("Authors : mieki256 , Latest update: 2026/04/06")
fx_m256_multiple_rotations :
[0]x{$1-1} # copying input image
ang={360/$1}
repeat $!
if $>!=0
rotate[$>] {$ang*$>},$2,$3,{w#0/2},{h#0/2}
fi
done
blend alpha
fx_m256_multiple_rotations_preview :
fx_m256_multiple_rotations $*
[ ツッコむ ]
以上です。
