mieki256's diary



2026/03/24(火) [n年前の日記]

#3 [gmic][python] rawデータに変換してgmicに渡して処理をさせる

画像を読み込んで、gmic用rawデータの並びに変換して、標準出力に送るPythonスクリプトを、AI(Google Gemini)に作成してもらった。これを使って gmic の標準入力に画像データを渡して処理ができるか確認したい。

環境は Windows11 x64 25H2 + Python 3.10.10 64bit + Pillow 11.3.0。

_img2raw.py
import sys
import argparse
from PIL import Image


# 画像を読み込み、指定された形式のRAWデータとして標準出力に送る
def image_to_raw(image_path, interleaved=False):
    try:
        with Image.open(image_path) as img:
            # アルファチャンネルの有無を判定して適切なモードへ変換
            if "A" in img.getbands():
                img = img.convert("RGBA")
            else:
                img = img.convert("RGB")

            if interleaved:
                # ピクセル並びをインターリーブ形式(RGBRGB... / RGBARGBArgba...)にする
                # tobytes() は Pillow のメモリレイアウト(インターリーブ)をそのまま返す
                sys.stdout.buffer.write(img.tobytes())
            else:
                # プレーンごとに並べる Planar形式 (RRR...GGG...BBB...)
                # split() で各チャンネルに分離して順番に書き出す
                channels = img.split()
                for channel in channels:
                    sys.stdout.buffer.write(channel.tobytes())

    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Convert image to RAW data and send to stdout."
    )
    parser.add_argument("input", help="Input image file path.")
    parser.add_argument(
        "-i",
        "--interleaved",
        action="store_true",
        help="Output in interleaved format (RGBRGB... / RGBARGBArgba...).",
    )

    args = parser.parse_args()
    image_to_raw(args.input, interleaved=args.interleaved)

使い方は以下。

python img2raw.py lena.png > out.raw

py img2raw.py lena.png | gmic i -.raw,uint8,512,512,1,3 blur 10.0 o -.png > out.png
py img2raw.py lena.png | gmic input -.raw,uint8,512,512,1,3 blur 10.0 output -.png > out.png

py img2raw.py -i lena.png | convert -depth 8 -size 512x512 rgb:- png:- > out.png

rawデータは、画像サイズ、枚数、チャンネル数などの情報を持っていないので、それらの情報は別途指定して読み込む必要がある。

以上です。

過去ログ表示

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