2026/03/24(火) [n年前の日記]
#1 [cg_tools] ImageMagickのdisplayのWindows版は無いのだろうか
アレコレ実験しているうちに、標準入力から画像データを受け取って表示するツールは無いのかなと思えてきた。Linux環境であれば ImageMagick の display を使えるのだろうけど、Windows上ではどうすれば…。
Windows版の ImageMagick には display は無いらしい。その代わり、昔は imdisplay というツールが付属していた。ただ、最近の ImageMagick ではサポートされなくなって、同梱されなくなった。
_ImageMagick/IMDisplay
_IM Display missing in Windows - ImageMagick/ImageMagick - Discussion #7399
_Shortcut "ImageMagick Display" is pointing to old version - 7.1.1.29 - Issue #7246 - ImageMagick/ImageMagick
_How to pipe an image to imdisplay (on Windows)? - ImageMagick/ImageMagick - Discussion #2164
_Windows installation win: and show: don't work - Issue #7609 - ImageMagick/ImageMagick
_WriteBlob Failed 'win:.' Can't figure out why. - Issue #667 - emcconville/wand
そもそも imdisplay は標準入力から画像データを受け取ることができない、という話も出ているようで…。
また、以前は代わりに「win:」なる指定を使うこともできていたらしいけれど、それも最近はサポートされなくなったようで…。
Windows版の ImageMagick には display は無いらしい。その代わり、昔は imdisplay というツールが付属していた。ただ、最近の ImageMagick ではサポートされなくなって、同梱されなくなった。
_ImageMagick/IMDisplay
_IM Display missing in Windows - ImageMagick/ImageMagick - Discussion #7399
_Shortcut "ImageMagick Display" is pointing to old version - 7.1.1.29 - Issue #7246 - ImageMagick/ImageMagick
_How to pipe an image to imdisplay (on Windows)? - ImageMagick/ImageMagick - Discussion #2164
_Windows installation win: and show: don't work - Issue #7609 - ImageMagick/ImageMagick
_WriteBlob Failed 'win:.' Can't figure out why. - Issue #667 - emcconville/wand
そもそも imdisplay は標準入力から画像データを受け取ることができない、という話も出ているようで…。
また、以前は代わりに「win:」なる指定を使うこともできていたらしいけれど、それも最近はサポートされなくなったようで…。
◎ ImageGlassがお勧めされている模様 :
ImageMagick のメンテナさんは「代わりに ImageGlass を使え」「内部で ImageMagick が使われているから imdisplay と似たようなもの」と言及しているけれど、その ImageGlass も標準入力から画像データを受け取って表示する機能は無いっぽいのだよな…。
_ImageGlass - A lightweight, versatile image viewer
ただ、ImageGlass には、開いてる画像が更新されたら自動で表示更新する機能があるので、処理結果の画像ファイル名を同じ名前にして ImageGlass で開いておけば、実験中に結果画像を確認できる。
まあ、標準入力/標準出力を利用して画像処理の実験をする機会自体が少ないだろうし…。そういうツールが無くてもフツーは困らないのだろうな…。
_ImageGlass - A lightweight, versatile image viewer
ただ、ImageGlass には、開いてる画像が更新されたら自動で表示更新する機能があるので、処理結果の画像ファイル名を同じ名前にして ImageGlass で開いておけば、実験中に結果画像を確認できる。
まあ、標準入力/標準出力を利用して画像処理の実験をする機会自体が少ないだろうし…。そういうツールが無くてもフツーは困らないのだろうな…。
[ ツッコむ ]
#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
[ ツッコむ ]
#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
使い方は以下。
rawデータは、画像サイズ、枚数、チャンネル数などの情報を持っていないので、それらの情報は別途指定して読み込む必要がある。
環境は 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データは、画像サイズ、枚数、チャンネル数などの情報を持っていないので、それらの情報は別途指定して読み込む必要がある。
[ ツッコむ ]
#4 [anime] 「数分間のエールを」を視聴
Eテレで放送されていた版を録画していたので視聴。日本で制作されたCGアニメ映画。MV制作を趣味にしている少年が主人公のストーリー。という説明で合ってるのかどうか…。
これは…いいな…。実にイイ感じの映画なのでは…。何かしらを作ったことがある人にはちょっと色々と刺さってきそうな内容のように思えた。素晴らしい。
脚本は花田十輝さん。少年少女の青春モノ企画ならまずこの人でしょう的ポジションになってる印象だけど、まとめ方、仕上げ方が上手いなあ…。さすがや…。
セルルックのようでいてちょっと違う、独特なスタイルの映像だったので、制作状況が気になってググってしまった。
_『数分間のエールを』No.1:映像制作チーム Hurray! が送る、初の劇場アニメーション
_『数分間のエールを』No.2:ルックデベロップメントと、「未明」MVの制作
_『数分間のエールを』No.3:モーションキャプチャと、画づくりの変遷
これまでMV制作を行ってきた映像クリエイター3人がコアメンバーになりつつ、別スタジオにも手助けしてもらって作った感じだったらしい。劇場アニメなのに基本3人で作ってしまうなんて、凄い時代になった…。
メインツールが blender だったとのことで「マジか」と思ってしまった。blenderでここまでの映像が作れてしまうのかと感心。手描きアニメの後追いにならないように映像スタイルについては独自性を追求したというのがまたイイ感じ。このスタイルのアニメ映像には新鮮さを感じた。
各カットにPCアプリのアレコレが挿入される見せ方にも感心。あの手のソレは、使ってる人なら瞬時に分かる記号のようなものになってきているのだなと…。
なにはともあれ、これはいいものを見せてもらったという印象。このアニメは良い。実に良い。素晴らしい。
これは…いいな…。実にイイ感じの映画なのでは…。何かしらを作ったことがある人にはちょっと色々と刺さってきそうな内容のように思えた。素晴らしい。
脚本は花田十輝さん。少年少女の青春モノ企画ならまずこの人でしょう的ポジションになってる印象だけど、まとめ方、仕上げ方が上手いなあ…。さすがや…。
セルルックのようでいてちょっと違う、独特なスタイルの映像だったので、制作状況が気になってググってしまった。
_『数分間のエールを』No.1:映像制作チーム Hurray! が送る、初の劇場アニメーション
_『数分間のエールを』No.2:ルックデベロップメントと、「未明」MVの制作
_『数分間のエールを』No.3:モーションキャプチャと、画づくりの変遷
これまでMV制作を行ってきた映像クリエイター3人がコアメンバーになりつつ、別スタジオにも手助けしてもらって作った感じだったらしい。劇場アニメなのに基本3人で作ってしまうなんて、凄い時代になった…。
メインツールが blender だったとのことで「マジか」と思ってしまった。blenderでここまでの映像が作れてしまうのかと感心。手描きアニメの後追いにならないように映像スタイルについては独自性を追求したというのがまたイイ感じ。このスタイルのアニメ映像には新鮮さを感じた。
各カットにPCアプリのアレコレが挿入される見せ方にも感心。あの手のソレは、使ってる人なら瞬時に分かる記号のようなものになってきているのだなと…。
なにはともあれ、これはいいものを見せてもらったという印象。このアニメは良い。実に良い。素晴らしい。
[ ツッコむ ]
以上、1 日分です。