2026/04/05(日) [n年前の日記]
#1 [gmic] G'MICのフィルタの作り方を勉強中。その6
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。
◎ 動的配列について。追試 :
昨日は push と pop で値を記録したり取り出したりしてたけど、動的配列のインデックス値を指定して値を取得できるか試してみた。
以下は2つの値を記録して参照する例。
以下は1つの値を記録して参照する例。一次元配列というか…。
「#1」は画像番号を指定しているけれど、名前で管理することもできる。
以下は2つの値を記録して参照する例。
1,1,1,3,0 # 画像スタックに、動的配列用の新しい画像(#1)を作成
repeat 4
rx={u(w#0)} # ランダムな座標値を取得
ry={u(h#0)}
eval "da_push(#1, [$rx, $ry, 0])" # da_push() でランダムな座標値を動的配列に記録
circle[0] $rx,$ry,16,1.0,255,0,0,255 # 赤い円を描画
done
repeat {da_size(#1)}
x,y,r={I[#1,$>]} # 動的配列から値を取得。値が複数ある場合は I[] を使う
circle[0] $x,$y,8,1.0,255,255,255,255 # 白い円を描画
done
- 複数の値が記録されている場合(二次元配列?)、 `I[ ]` で値を取得できる。
- 値が1つしか記録されてない場合(一次元配列?)、 `i[ ] ` で値を取得できる。
以下は1つの値を記録して参照する例。一次元配列というか…。
1,1,1,1,0 # 動的配列用の画像を作成。チャンネル数に1を指定しているので値は1つしか入らない
repeat 8
rx={u(w#0)}
eval "da_push(#1, $rx);" # 値を1つだけ記録
circle[0] $rx,50%,16,1.0,255,0,0,255
done
repeat {da_size(#1)}
x={i[#1,$>]} # 値を1つだけ読みだす
circle[0] $x,50%,8,1.0,255,255,255,255
done
「#1」は画像番号を指定しているけれど、名前で管理することもできる。
1,1,1,4,0 => dary
repeat 16
rx={u(w#0)}
ry={u(h#0)}
eval "da_push(#$dary, [$rx,$ry,0,0]);"
circle[0] $rx,$ry,16,1.0,255,0,0,255
done
repeat {da_size(#1)}
x,y,nn,mm={I[#$dary,$>]}
circle[0] $x,$y,8,1.0,255,255,255,255
done
◎ 変数の参照時の$について :
G'MICのスクリプトを勉強していて、変数の代入時と参照時で書き方が変わるのがなんだかアレだなと思えてきた。代入時は x={w} といった感じで変数名だけを書くのに、参照時は circle $x,$y,16 のように $ をつけなきゃいけない。なんだこの糞仕様。一体何の言語を踏襲してこうなったんだ?
そう思ってAI(Google Gemini)に尋ねてみたら、「アレは参照じゃなくて置換なんスよ」「シェルスクリプトも置換時は $ つけるじゃないスか」と言われて腑に落ちた。たしかに Linux のシェルスクリプトも、代入時は変数名だけを書くけれど、参照、というか置換時は $ をつける…。
つまり G'MICのスクリプトって、プログラミング言語というよりシェルスクリプトに近い仕様なのね…。何にせよ、変数の代入時と参照時(置換時)で書き方が変わると覚えておかないと…。
にしても分かりづらい…。どこかの時点で Lua でも内蔵しちゃったほうが良かったんじゃないのか…。いや、でも、利用できるスクリプト/言語が複数あるとサポートが面倒臭くなるか…。G'MICスクリプトとLuaスクリプトが混在してる user.gmic なんて想像しただけで気持ち悪そうでもあるし…。
そう思ってAI(Google Gemini)に尋ねてみたら、「アレは参照じゃなくて置換なんスよ」「シェルスクリプトも置換時は $ つけるじゃないスか」と言われて腑に落ちた。たしかに Linux のシェルスクリプトも、代入時は変数名だけを書くけれど、参照、というか置換時は $ をつける…。
export PATH="$PATH:~/bin"
つまり G'MICのスクリプトって、プログラミング言語というよりシェルスクリプトに近い仕様なのね…。何にせよ、変数の代入時と参照時(置換時)で書き方が変わると覚えておかないと…。
にしても分かりづらい…。どこかの時点で Lua でも内蔵しちゃったほうが良かったんじゃないのか…。いや、でも、利用できるスクリプト/言語が複数あるとサポートが面倒臭くなるか…。G'MICスクリプトとLuaスクリプトが混在してる user.gmic なんて想像しただけで気持ち悪そうでもあるし…。
◎ 別言語からG'MICを利用 :
Lua と言えば、LuaからG'MICを呼び出して使えるモジュールが存在するっぽい。
_lua_module-gmic | Lua module written in C for interfacing with libgmic, an open-source framework for image processing
_mrharmonies/lua_module-gmic: Lua module written in C for interfacing with libgmic, an open-source framework for image processing
Python から G'MIC を呼び出して使えるモジュールもあるのだけど、Linux上でしか使えないという話をどこかで目にしたような記憶が…。
_gmic - PyPI
_GreycLab/gmic-py: Python binding for the G'MIC Image Processing Framework
Ruby から G'MIC を呼び出してる事例も見かけた。G'MIC CLI を呼び出せば使える、ということかな…。
_Ruby から system 関数を用いて GMIC を呼び出す
_lua_module-gmic | Lua module written in C for interfacing with libgmic, an open-source framework for image processing
_mrharmonies/lua_module-gmic: Lua module written in C for interfacing with libgmic, an open-source framework for image processing
Python から G'MIC を呼び出して使えるモジュールもあるのだけど、Linux上でしか使えないという話をどこかで目にしたような記憶が…。
_gmic - PyPI
_GreycLab/gmic-py: Python binding for the G'MIC Image Processing Framework
Ruby から G'MIC を呼び出してる事例も見かけた。G'MIC CLI を呼び出せば使える、ということかな…。
_Ruby から system 関数を用いて GMIC を呼び出す
[ ツッコむ ]
#2 [nitijyou] ハンディクリーナーを購入
親父さんがヨドバシカメラからハンディクリーナーを購入したので一応メモしておく。メモしておかないと忘れる…。
_商品情報_電池式クリーナー | 山善の商品情報サイト | YAMAZEN BOOK
乾電池式だから吸い込む力は弱いけれど、親父さんが食べこぼしたお菓子ぐらいは吸い取れる…といいな…。
- 山善 コードレスハンディクリーナー ZHJ-340(W)。乾電池式。単3形アルカリ乾電池4本使用。すき間ノズル付き。サイズ 幅85x奥行き200x高さ110mm。質量290g(電池含まず)。連続使用時間35分間。
_商品情報_電池式クリーナー | 山善の商品情報サイト | YAMAZEN BOOK
乾電池式だから吸い込む力は弱いけれど、親父さんが食べこぼしたお菓子ぐらいは吸い取れる…といいな…。
[ ツッコむ ]
#3 [nitijyou] イヤーパッドを購入
TVの視聴時に使っているヘッドフォン、audio-technica ATH-P100M のイヤーパッドがボロボロになってしまったので、親父さんがヨドバシカメラに注文するついでに、一緒に注文してもらった。
これでまだしばらくは使える…といいな…。
余談。なんだかしっかりした紙製の箱に入ってたのだけど、こういう商品はビニール袋にでも入れて売ってしまっても良さそうな…。いや、紫外線で劣化するとかあるんかな…?
- audio-technica HP-P100。交換イヤパッド。左右1セット。ATH-P100L, ATH-P100M, ATH-P100LV用。税込543円。2つ購入。
これでまだしばらくは使える…といいな…。
余談。なんだかしっかりした紙製の箱に入ってたのだけど、こういう商品はビニール袋にでも入れて売ってしまっても良さそうな…。いや、紫外線で劣化するとかあるんかな…?
[ ツッコむ ]
以上、1 日分です。