要約
Windows の PowerShell 上で複数の画像ファイルのフォーマットを変換するには, 以下のようにします.
> dir -Name * | % {magick convert "$_" "$_.png"}
背景
iPhone 使用者から LINE で送られてきた画像を Windows に転送すると, 数字だけのファイル名で拡張子が見当たりません. 調べてみると HEIF というフォーマットのようでした.
これらのファイルを, 当初は Gimp で 1 つずつファイルを開いてエクスポートして変換していました. しかしファイル数が増えてくると作業が非常に面倒になったので, コマンドラインで一気に変換できる方法を調べました.
ImageMagick
画像フォーマットの変換には ImageMagick を使います. Windows 用のバイナリを普通にインストールすれば OK です.
Linux などで ImageMagick を使っていた私のような人向けの注意点として, コマンドは convert
ではなく, magick convert
とする必要があります.
PowerShell
PowerShell でファイル名を得るためには, dir -Name
を使います.
そして dir -Name
の出力を ImageMagick に渡すには, 次のようにします.
> dir -Name * | % {magick convert "$_" "$_.png"}
$_
にファイル名が入っているので, そこに ".png" を付けたファイルに変換後の画像を保存しています (この構文の細かい意味は理解していません).
この内容をバッチファイルにして実行するには, 例えば "myconvert.ps1" というファイルに保存して, 以下のように実行すれば OK です (あまり楽にはなっていない気がしますが).
> PowerShell -ExecutionPolicy RemoteSigned .\myconvert.ps1
補足
拡張子の付いているファイル名を別の拡張子のファイル名に変換したい (例えば foo.jpg を foo.png に変換したい) 場合にどうするか? も調べたのですが, ややこしくてあきらめました. どうしてもそれをやりたい場合は (私にとっては) Git for Windows の Bash を使うのが近道のような気がしますが, 今回はそこまでは試してません.