2026/03/24(火) [n年前の日記]
#2 [gmic][imagemagick] gmicとImageMagickを繋げる
コマンドラインで画像処理ができるツール、ImageMagick の convert (magick convert) も、標準入力や標準出力を利用することができるらしい。
下記の例では、convert が標準入力から受け取った画像データにガウシアンぼかしをかけて標準出力に送っている。
ベタデータを扱う際は、.raw の指定が使える模様。ただ、ベタデータは、画像サイズ、チャンネル毎の深さ、チャンネル数(RGB/RGBA)の情報を持っていないので、それらは別途指定しないといけない。
下記の例では、convert が標準入力から受け取った画像データにガウシアンぼかしをかけて標準出力に送っている。
cat input.png | convert - -gaussian-blur 10x10 - | py view_stdin.py
- 「-」を指定することで、標準入力/標準出力の指定になる。
- py view_stdin.py は、標準入力から受け取った画像データを表示するPythonスクリプト。
ベタデータを扱う際は、.raw の指定が使える模様。ただ、ベタデータは、画像サイズ、チャンネル毎の深さ、チャンネル数(RGB/RGBA)の情報を持っていないので、それらは別途指定しないといけない。
convert lena.png rgb:-.raw | convert -depth 8 -size 512x512 rgb:-.raw out.png
- ファイル名の頭に「rgb:」「rgba:」をつけることでRGB/RGBAの指定ができる。
- -depth 8 で各チャンネルが8bitの深さであると指定。
- -size 512x512 で画像サイズを指定。
- rgb:-.raw でRGB画像のベタデータを標準入力から受け取る、もしくは標準出力に送ると指定している。
◎ gmicとの連携 :
gmic と組み合わせてみたけれど…。
変な画像になってしまった。RGBチャンネルが順に並んだ白黒画像になっているように見える。
gmic と ImageMagick は .raw の画像データの並びが違っていて、そのせいで gmic の出力結果を ImageMagick側で正しく処理できないらしい。
gmic 側に permute cxyz を指定することで、ImageMagick 側と同様のデータの並びに変更することができる模様。
以下の指定で、gmic が内蔵しているサンプル画像 tiger が再現された。
convert (ImageMagick)側の最後の出力を標準出力にしてみる。
ImageMagick側でガウシアンぼかしをかけてみる。
gmic sp tiger o -.raw | convert -depth 8 -size 750x500 rgb:- out.png
変な画像になってしまった。RGBチャンネルが順に並んだ白黒画像になっているように見える。
gmic と ImageMagick は .raw の画像データの並びが違っていて、そのせいで gmic の出力結果を ImageMagick側で正しく処理できないらしい。
- gmicは、RRRRRR,GGGGGG,BBBBBB の並びになっている。
- ImageMagick は、RGB,RGB,RGB,RGB... の並びになっている。
gmic 側に permute cxyz を指定することで、ImageMagick 側と同様のデータの並びに変更することができる模様。
以下の指定で、gmic が内蔵しているサンプル画像 tiger が再現された。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- out.png
convert (ImageMagick)側の最後の出力を標準出力にしてみる。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- png:- | py view_stdin.py
- png:- と記述することで、標準出力に pngフォーマットで送るという指示になる。
ImageMagick側でガウシアンぼかしをかけてみる。
gmic sp tiger permute cxyz o -.raw | convert -depth 8 -size 750x500 rgb:- -gaussian-blur 10x10 png:- | py view_stdin.py
[ ツッコむ ]
以上です。