細かいところに手が届くWindowsPowershell。
その例として、「特定のフォルダにあるpngファイルをjpgにコンバートする」をメモします。
convert.ps1
# 変換対象のフォルダを指定
$folderPath = "C:\Users\hoge\fuga\photo"
# System.Drawing を使うためにアセンブリを読み込む
Add-Type -AssemblyName System.Drawing
# PNGファイルを取得
$pngFiles = Get-ChildItem -Path $folderPath -Filter *.png
foreach ($file in $pngFiles) {
# 画像を読み込む
$image = [System.Drawing.Image]::FromFile($file.FullName)
# 出力ファイル名(拡張子を .jpg に変更)
$jpgPath = [System.IO.Path]::ChangeExtension($file.FullName, "jpg")
# JPEGエンコーダを取得
$jpgEncoder = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq "image/jpeg" }
# エンコードパラメータ(品質指定:90)
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$qualityParam = New-Object System.Drawing.Imaging.EncoderParameter([System.Drawing.Imaging.Encoder]::Quality, 90L)
$encoderParams.Param[0] = $qualityParam
# JPGとして保存
$image.Save($jpgPath, $jpgEncoder, $encoderParams)
# メモリ解放
$image.Dispose()
}
適当な手段で上記を作成し、このスクリプトをPowershellで走らせます。
- フォルダ内にある.pngを読み込みます。
- 解像度はそのまま、jpgに圧縮します。
- 変数で指定したフォルダに、名前をそのままにして出力します。
これはあくまでも「こういうことができた」という例なので、
- ドラッグ&ドロップに対応
- 出力先を別にする
- 変換後のファイルに別の名前を付与する
など、調整のしがいがあります。