PowerShellで画像を処理する方法
[質問]
PowerShellで、PythonのPillowのようにImageを扱うことはできますか。今は画像処理関係はPowerShellのスクリプトから、Pythonスクリプトに下請けさせています。
[回答] Gemini
結論から申し上げますと、可能です。 PowerShellは .NET Framework / .NET Core の機能を直接呼び出せるため、標準の描画ライブラリ(System.Drawing)や、よりモダンな外部ライブラリを使用することで、Python(Pillow)を介さずに画像処理を完結させられます。
ただ、Pillowほど「至れり尽くせり」なコマンドが標準で用意されているわけではないので、少しコードが「プログラミング寄り」になる点には注意が必要です。
1. 標準機能(System.Drawing)を使う方法
Windows標準のPowerShellであれば、.NETの System.Drawing アセンブリを利用して、リサイズ、回転、フォーマット変換などが可能です。
# アセンブリの読み込み
Add-Type -AssemblyName System.Drawing
# 画像の読み込み
$image = [System.Drawing.Image]::FromFile("C:\temp\input.jpg")
# 例:画像を時計回りに90度回転
$image.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone)
# 例:PNGとして保存
$image.Save("C:\temp\output.png", [System.Drawing.Imaging.ImageFormat]::Png)
# メモリ解放(重要!)
$image.Dispose()
2. ImageMagick をPowerShellから叩く
「Pillowのような手軽さ」を求めるなら、ImageMagick をインストールして、そのCLI(magick コマンド)をPowerShellから制御するのが最も効率的です。
PowerShellのループと組み合わせれば、フォルダ内の画像一括処理も非常に強力です。
3. モダンな選択肢:ImageSharp
もしあなたが PowerShell 7系(Core)を使っていて、より高度で高速な処理を求めるなら、.NET用の「ImageSharp」というライブラリを読み込んで使う手もあります。これはPillowに非常に近い操作感を持つモダンなライブラリです。
比較表:Python(Pillow) vs PowerShell
| 機能 | Python (Pillow) | PowerShell (.NET) |
|---|---|---|
| 手軽さ | 非常に高い | 中(.NETの知識が必要) |
| 速度 | 高速 | 高速(ネイティブ動作) |
| 外部依存 | pip install Pillow |
標準なら不要(ImageMagick等なら必要) |
| 得意分野 | AI/画像解析連携 | OS操作・ファイル管理との連携 |
正直なアドバイス
「餅は餅屋」という言葉通り、複雑な画像フィルタリングや描画を伴うなら、今のままPythonに下請けさせるのが一番楽です。
しかし、「特定のフォルダに来た画像をリサイズして保存するだけ」といった単純なワークフローであれば、PowerShellだけで完結させたほうが、Pythonの実行環境(仮想環境など)を気にしなくて済むため、管理がスッキリします。
まずは「サイズ変更」や「形式変換」など、どの程度の処理をPowerShell化したいか、具体的なやり方を作成してみましょうか?