画像回転スクリプトを大幅変更してみた。
Powershellっぽいコマンドライン引数の取り方や、例外処理、あと、個人的にほしかった元画像に対する回転処理など。
次は画像縮小スクリプトかな。
param( [switch]$right, [switch]$left, [switch]$reverse, [string]$filename, [string]$overwrite="n" ) $private:flip =0 if($right){ $flip = 90 }elseif($reverse){ $flip = 180 }elseif($left){ $flip = 270 }else{ $flip = 90 } $ErrorActionPreference = "stop" [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void][System.Reflection.Assembly]::LoadWithPartialName("System.IO") # 保存用ファイルパス作成処理 # 引数1 :元画像ファイルのフルパス # 引数2 :回転角度(90,180,270) # 戻り値:<元ファイルのパス>「rotated+回転角度」<元ファイルの拡張子> function script:GetNewFileName($originalFileName,$flip){ # 元画像の格納ディレクトリを取得 $private:path = [System.IO.Path]::GetDirectoryName($originalFileName) # 元画像のファイル名(拡張子除く)を取得 $private:originalName = [System.IO.Path]::GetFileNameWithoutExtension($originalFileName) # 元画像の拡張子を取得(ピリオドは含まれる) $private:extensionName = [System.IO.Path]::GetExtension($originalFileName) # 回転後のファイル名(拡張子あり)を作成 $private:newName = $originalName + "_rotated" + $flip + $extensionName # 新ファイルパスを作成してリターン return [System.IO.Path]::Combine($path,$newName) } # 画像回転処理 # 引数1 :Imageオブジェクト # 引数2 :回転角度(90,180,270) # 戻り値:なし function script:RotateImage($image, $rotate){ # 回転(時計回りで90,180,270と回転) if($rotate -eq 90){ $image.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone) }elseif($rotate -eq 180){ $image.RotateFlip([System.Drawing.RotateFlipType]::Rotate180FlipNone) }elseif($rotate -eq 270){ $image.RotateFlip([System.Drawing.RotateFlipType]::Rotate270FlipNone) }else{ # 上記いずれでもなければ時計回りに90度回転 $image.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone) } } # メイン処理 # 引数1 :回転角度(時計回りに 90,180,270) # 引数2 :元画像ファイルのフルパス # 引数3 :上書き(y) or コピー保存(n) # 戻り値:なし function script:Main($rotate,$originalFileName,$overwrite){ $private:sourceImage = $null $private:rotatedImage = $null try{ # 元画像取得 $sourceImage = [System.Drawing.Image]::FromFile($originalFileName); if($overwrite -eq "n"){ # 元画像の複製作成(回転対象はこちらの画像) $rotatedImage = [System.Drawing.Image]$sourceImage.Clone(); RotateImage $rotatedImage $rotate # 新ファイルネーム $private:newFileName = GetNewFileName $originalFileName $rotate # 保存 $rotatedImage.Save($newFileName,[System.Drawing.Imaging.ImageFormat]::Jpeg) echo "保存完了しました:$newFileName" }else{ RotateImage $sourceImage $rotate # 保存 $sourceImage.Save($originalFileName,[System.Drawing.Imaging.ImageFormat]::Jpeg) echo "保存完了しました:$originalFileName" } }catch{ echo "例外が発生しました:$error" }finally{ try{ # 後始末 if($null -ne $rotatedImage){ $rotatedImage.Dispose() } if($null -ne $sourceImage){ $sourceImage.Dispose() } }catch{ echo "画像クローズ時の例外:$error" } } } # 回転処理の実行 Main $flip $filename $overwrite