mieki256's diary



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。

動的配列について。追試 :

昨日は push と pop で値を記録したり取り出したりしてたけど、動的配列のインデックス値を指定して値を取得できるか試してみた。

以下は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 のシェルスクリプトも、代入時は変数名だけを書くけれど、参照、というか置換時は $ をつける…。

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 を呼び出す

以上です。

過去ログ表示

Prev - 2026/04 -
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project