現在サブで使ってるPentaxQ10は画像自動回転機能がなく、縦画像は手動で回転させる必要がありました。これをなんとかできないかなーと、Powershellで書いてみることにしました。
.Netのアセンブリを多用する結果となりましたが、なんとか完成。引数判定や、画像ファイル判定、例外処理が足りてませんが、とりあえず動いてます。
以下ソース。
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void][System.Reflection.Assembly]::LoadWithPartialName("System.IO") # メイン処理 # 引数1 :元画像ファイルのフルパス # 引数2 :回転角度(90,180,270) # 戻り値:<元ファイルのパス>「rotated+回転角度」<元ファイルの拡張子> function GetNewFileName($originalFileName,$flip){ # 元画像の格納ディレクトリを取得 $path = [System.IO.Path]::GetDirectoryName($originalFileName); # 元画像のファイル名(拡張子除く)を取得 $originalName = [System.IO.Path]::GetFileNameWithoutExtension($originalFileName); # 元画像の拡張子を取得(ピリオドは含まれる) $extensionName = [System.IO.Path]::GetExtension($originalFileName); # 回転後のファイル名(拡張子あり)を作成 $newName = $originalName + "_rotated" + $flip + $extensionName # 新ファイルパスを作成してリターン return [System.IO.Path]::Combine($path,$newName); } # メイン処理 # 引数1 :回転角度(時計回りに -90,-180,-270) # 引数2 :元画像ファイルのフルパス # 戻り値:なし function Main($rotate,$originalFileName){ # 元画像取得 $sourceImage = [System.Drawing.Image]::FromFile($originalFileName); # 元画像の複製作成(回転対象はこちらの画像) $rotatedImage = [System.Drawing.Image]$sourceImage.Clone(); $flip = 0 # 回転(時計回りで90,180,270と回転) if($rotate -eq "-90"){ $rotatedImage.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone) $flip = 90 }elseif($rotate -eq "-180"){ $rotatedImage.RotateFlip([System.Drawing.RotateFlipType]::Rotate180FlipNone) $flip = 180 }elseif($rotate -eq "-270"){ $rotatedImage.RotateFlip([System.Drawing.RotateFlipType]::Rotate270FlipNone) $flip = 270 }else{ # 上記いずれでもなければ時計回りに90度回転 $rotatedImage.RotateFlip([System.Drawing.RotateFlipType]::Rotate90FlipNone) $flip = 90 } # 新ファイルネーム $newFileName = GetNewFileName $originalFileName $flip # 保存 $rotatedImage.Save($newFileName,[System.Drawing.Imaging.ImageFormat]::Jpeg) echo "保存完了しました:$newFileName" } # 回転処理の実行 Main $args[0] $args[1]