ImageMagickを使いPowerShellで画像を縮小する方法。「一括処理対応」

コンピュータ
c#で単独.exeを作る方法をしり、画像ファイルをグレースケールに変換する外部コマンドを作成したのですが、よくよく考えるとコンソールで画像変換をする場合ImageMagickが定番で、わざわざC#で作る必要がないことに気が付きました。
C#で作るグレースケールへ変換するコンソールアプリ
コンソールで実行するシンプルな画像変換アプリを作りたいと思います。C#でOpenCVSharpを使い画像ファイルをグレスケールに変換し、png形式で保存する外部コマンドになります。ソースコードファイル名:grayconv.csproj<Pr...

縮小処理はImageMagickを使いたいと思います。

縮小

それではImageMagickで画像を縮小する書式は以下のようになります。

magick in.png -filter Lanczos -resize 50% out.png

補完方法は高品質なLanczosを指定しています。filterはオプションですの省略可能です。

縮小処理しか試していませんが、倍率を200%などとすると拡大処理になると思われます

PowerShell的一括処理

ls *.png | % { magick $_.FullName -filter Lanczos -resize 50% ("{0}.resize.png" -f $_.FullName) }

サフィックスとして「.resize.png」を連結しただけなので、パスに.pngが2回出てきてしまうのが好みでないですが、とりあえず一括処理されるはず。出力するディレクトリを用意しそちらに出力するほうが一般的だと思います。

2値化

閾値50%で2値化

magick 加工前画像.png -threshold 50% 加工後画像.png

グレースケール化

magick 加工前画像.png -colorspace Gray 加工後画像.png

減色

4bit(16色?)に減色

magick 加工前画像.png -depth 4 加工後画像.png

画像の情報を取得

magick identify -verbose 画像ファイル.png

2つの画像ファイルの差分

magick 画像ファイル1.png 画像ファイル2.png -compose difference -composite 差分画像.png

縮小→シャープ

 magick 加工前.png -filter Lanczos -define filter:blur=0.99 -distort Resize 50% 加工後.png

magickコマンドのオプションはパイプライン状に連結することで、順番にフィルターが実行されるようです。

グレーケール化→ポスタリゼーション(16色へ減色)

magick 加工前.png -colorspace Gray -posterize 16 加工後.png

水平方向で2分割

magick input.png -crop 50%x100% +repage +adjoin output_%d.png

グレースケール化→ガンマ補正→縮小

出力先はgrayというサブディレクトリに元のファイルと同盟で出力される。

ls *.png -File | % { $n = $_.Name; magick $n -colorspace Gray -gamma 1.5 -resize 25% "gray/$n" }

コメント