mieki256's diary



2026/03/23(月) [n年前の日記]

#1 [cg_tools][gmic][python] G'MIC CLIを勉強中

G'MICという、無料で利用できる数百種類の画像フィルタ集がある。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Main

一般的には、GIMP、Krita、Paint.NET等の画像編集ソフトから呼び出して、GUIでパラメータを指定して利用することがほとんどだろうけど…。この G'MIC には CLI版があって、ImageMagick っぽい感じのコマンドラインツールとして利用することもできる。

その G'MIC CLI (gmic.exe) の使い方について勉強中。

環境は Windows11 x64 25H2 + G'MIC CLI 3.7.4。

インストール :

公式ページの、「Command-line interface (CLI):」から入手。

_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download

gmic_3.7.4_cli_win64.zip を入手して解凍。今回は D:\home2\bin\gmic_cli\ に配置した。

余談だけど、G'MIC CLI 3.7.4 をインストールしたのに、バージョン表示は 3.7.3 になってるな…。
> gmic version

  gmic: GREYC's Magic for Image Computing: Command-Line Interface
        Version 3.7.3 (pre-release #26031110)
        (https://gmic.eu)

        Copyright (c) 2008-2026, David Tschumperlテゥ / GREYC / CNRS.
        (https://www.greyc.fr)

パスを通す :

環境変数PATHに G'MIC CLI (gmic.exe) のインストール場所を追加しておけば gmic.exe が使えるようになるけれど…。

自分の場合は実験時しか使わないだろうから、batファイルを実行した時だけ環境変数PATHに追加して使えるようにしてみた。このbatファイルはAI(Google Gemini)に作ってもらった。

gmic.bat
@echo off
if defined HOMEBIN (
    echo # HOMEBIN is defined: %HOMEBIN% >&2
    set "GMICCLIPATH=%HOMEBIN%\gmic_cli"
) else (
    echo # HOMEBIN is NOT defined. Using default path. >&2
    set "GMICCLIPATH=D:\home2\bin\gmic_cli"
)
where gmic.exe >nul 2>nul
if %ERRORLEVEL% neq 0 (
    echo # Not found gmic.exe. Adding to Path... >&2
    set "PATH=%GMICCLIPATH%;%PATH%"
    echo # G'MIC CLI is now enabled. [%GMICCLIPATH%] >&2
)
gmic.exe %*

gmic.bat を実行すると、gmic.exe が見えてるか見えてないかで処理を分けて、見えてない時だけ環境変数PATHの先頭にgmic.exeの場所を追加する。その後、同じコマンドプロンプトの中で gmic と打てば gmic.exe のほうが呼ばれる状態になる。

echo行の最後についている「>&2」は、STDERR に出力せよという指定。そのままだと標準出力(STDOUT)に出してしまうけれど、標準入力/標準出力を利用した実験をする時にマズいので、STDERR に出力するようにしておいた。

サンプル画像を使う :

G'MIC CLI(gmic.exe)には各種実験に使えそうなサンプル画像も同梱/内蔵されているらしい。

以下で取り出せる。
gmic sp lena o out.png
or
gmic sample lena output out.png
  • sp/sample : サンプル画像を利用するという指定。
  • lena : lena画像を指定。
  • o/output : 出力を指定
  • out.png : 今回の出力画像ファイル名。

リファレンスは以下にある。

_gmic_reference.pdf

リファレンスによると、サンプル画像として以下を指定できるらしい。めっちゃある…。わざわざ実験用画像を用意しなくても済むのはありがたい。
apples
balloons
barbara
boats
bottles
butterfly
cameraman
car
cat
cliff
chick
colorful
david
dog
duck
eagle
elephant
earth
flower
fruits
gmicky
gmicky_mahvin
gmicky_wilber
greece
gummy
house
inside
landscape
leaf
lena
leno
lion
mandrill
monalisa
monkey
parrots
pencils
peppers
portrait0
portrait1
portrait2
portrait3
portrait4
portrait5
portrait6
portrait7
portrait8
portrait9
roddy
rooster
rose
square
swan
teddy
tiger
tulips
wall
waterfall
zelda

標準出力に結果を出力 :

G'MIC CLI(gmic.exe)は、標準入力から画像データを受け取ったり、標準出力に画像データを送ったりすることができるらしい。

標準出力に画像データを送る例。サンプル画像「tiger」を、標準出力に、pngフォーマットで送っている。
gmic sample tiger output -.png > out.png
  • 「-」という指定は標準入力や標準出力を示す。
  • その後に続く拡張子指定 ―― 「.png」等で画像フォーマットを指定する。
  • 「> out.png」により標準出力の結果を out.png としてファイル保存する。リダイレクトと呼ぶらしい。


gmicで標準出力に画像データを送り、パイプを経由して別のgmicの標準入力に渡して、グレースケール化して、また標準出力に送ってファイル保存する例。
gmic sp lena o -.png | gmic input -.png to_gray o -.png > out.png
  • sp lena : サンプル画像として lena を用意している。sample lena と書いても良い。
  • o -.png : 標準出力にpngフォーマットで出力。 output -.png と書いても良い。
  • 「|」がパイプ。標準出力を標準入力に渡すための指定。
  • input -.png : 標準入力からpngフォーマットの画像を受け取る。i -.png と書いても良い。
  • to_gray : グレースケール化。luminance を指定しても似た結果になる。
  • > out.png : 標準出力の結果を out.png としてファイル保存。


ベタデータで送る場合は以下。
gmic sp lena o -.raw,uint8 | gmic i -.raw,uint8,512,512,1,3 to_gray o -.png > out.png
  • -.raw,uint8 で、ベタデータをbyte単位で送るという指示になる。
  • 受け取る側は、-.raw,uint8,横幅,縦幅,枚数,チャンネル数、を指定する…のだと思う。最後のあたりは理解が怪しい。
  • ベタデータの場合は、画像サイズ、枚数、チャンネル数などが分からないので、それらの情報も伝えないといけない。
  • RGB画像ならチャンネル数は3に、RGBA画像ならチャンネル数は4になる。

標準入力から画像データを読み込んで表示するPythonスクリプト :

gmic から標準出力に画像を送った際、どんな画像になったのか確認するのが面倒臭い。標準入力から画像データを読み込んで表示するPythonスクリプトをAI(Google Gemini)に作成してもらった。

環境は Windows11 x64 25H2 + Python 3.10.10 64bit。Pillow 11.3.0 + tkinter を使ってる。

_view_stdin.py
import sys
import io
import tkinter as tk
from PIL import Image, ImageTk

def display_in_tkinter():
    # 1. 標準入力からバイナリデータを読み込む
    input_data = sys.stdin.buffer.read()
    if not input_data:
        print("Error : Not found data")
        return

    try:
        # 2. Pillowで画像データとして読み込み
        pil_img = Image.open(io.BytesIO(input_data))
        
        # 3. Tkinterウィンドウの設定
        root = tk.Tk()
        root.title("Stdin Image Viewer")

        # --- キーバインド設定 ---
        # ESCキー、大文字Q、小文字q のいずれかでウィンドウを閉じる
        root.bind('<Escape>', lambda e: root.destroy())
        root.bind('<q>', lambda e: root.destroy())
        root.bind('<Q>', lambda e: root.destroy())

        # 4. Pillowの画像をTkinter用のフォーマットに変換
        tk_img = ImageTk.PhotoImage(pil_img)

        # 5. ラベルウィジェットに画像をセットして配置
        label = tk.Label(root, image=tk_img)
        label.pack(padx=10, pady=10)

        # 6. Closeボタンの追加
        # command=root.destroy を指定することでクリック時に終了します
        btn = tk.Button(root, text="Close (Q)", command=root.destroy, width=20)
        btn.pack(pady=5)

        # ウィンドウを表示
        root.mainloop()

    except Exception as e:
        print(f"Error : {e}")

if __name__ == "__main__":
    display_in_tkinter()
  • ESCキー、Qキーを押せば終了する。


以下のような感じで使える。
cat lena.png | py view_stdin.py
gmic sp lena o -.png | py view_stdin.py

以下のような見た目になる。

view_stdin_ss01.png

Ubuntu Linux上でインストールされるバージョン :

Ubuntu Linux 24.04 LTS上で gmic をインストールするとバージョンは何になるのかが気になった。Ubuntu Linux 24.04 LTS をベースにしている Zorin OS 18 上で確認してみた。

sudo apt install gmic
sudo apt install imagemagick

```
$ gmic version

  gmic: GREYC's Magic for Image Computing: command-line interface
        Version 2.9.4
        (https://gmic.eu)

        Copyright (c) 2008-2026, David Tschumperle / GREYC / CNRS.
        (https://www.greyc.fr)

$ convert -version
Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5) 
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw tiff webp wmf x xml zlib

gmic 2.9.4、ImageMagick 6.9.2-98 Q16 か…。古いね…。

ImageMagick が7系ではなく6系なのは、他のアプリとの兼ね合いなんだろう…。6系はコマンド名が convert だけど、7系では magick になっていたはずだし…。

Ubuntu Linux系なら、例えば以下で gmic の動作確認ができる。
gmic sp lena o -.png | display -
  • 標準出力の内容を確認するには ImageMagick の display が使える。
  • 「-」を記述することで標準入力/標準出力であることを指定する。

以上です。

過去ログ表示

Prev - 2026/03 -
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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project