PowerShell で画像の回転、リサイズを行う
経緯
スマホで取った写真の解像度が大きいので、SNS へのアップ前に自力で小さくしようと思ったら GIMP 立ち上げて… 面倒だったので、PowerShell でやってみました
画像の回転
# アセンブリの読み込み
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# 画像ファイルの読み込み
$image = New-Object System.Drawing.Bitmap("ファイルパス")
# 回転
$image.RotateFlip("RotateFlipType 列挙体より選択")
# 保存
$image.Save("ファイルパス", [System.Drawing.Imaging.ImageFormat]::"ImageFormat クラスのプロパティより選択")
# オブジェクトの破棄
$image.Dispose()
RotateFlipType 列挙体と意味
値 | 反転 | 回転(全て時計回り) |
---|---|---|
Rotate270FlipNone | なし | 270 度 |
Rotate180FlipNone | なし | 180 度 |
Rotate90FlipNone | なし | 90 度 |
RotateNoneFlipNone | なし | なし |
Rotate270FlipX | 水平 | 270 度 |
Rotate180FlipX | 水平 | 180 度 |
Rotate90FlipX | 水平 | 90 度 |
RotateNoneFlipX | 水平 | なし |
Rotate270FlipY | 垂直 | 270 度 |
Rotate180FlipY | 垂直 | 180 度 |
Rotate90FlipY | 垂直 | 90 度 |
RotateNoneFlipY | 垂直 | なし |
Rotate270FlipXY | 水平&垂直 | 270 度 |
Rotate180FlipXY | 水平&垂直 | 180 度 |
Rotate90FlipXY | 水平&垂直 | 90 度 |
RotateNoneFlipXY | 水平&垂直 | なし |
回転の例
デスクトップの hoge.jpg を時計回りに 90 度回転させて hoge_turn90.jpg として保存する例
# アセンブリの読み込み
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# 画像ファイルの読み込み
$image = New-Object System.Drawing.Bitmap("C:\Users\miyamiya\Desktop\hoge.jpg")
# 回転
$image.RotateFlip("Rotate90FlipNone")
# 保存
$image.Save("C:\Users\miyamiya\Desktop\hoge_turn90.jpg", [System.Drawing.Imaging.ImageFormat]::Jpeg)
# オブジェクトの破棄
$image.Dispose()
画像のリサイズ
# アセンブリの読み込み
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# 画像ファイルの読み込み
$image = New-Object System.Drawing.Bitmap("ファイルパス")
# 縮小先のオブジェクトを生成
$canvas = New-Object System.Drawing.Bitmap("リサイズ後の幅", "リサイズ後の高さ")
# 縮小先へ描画
$graphics = [System.Drawing.Graphics]::FromImage($canvas)
$graphics.DrawImage($image, (New-Object System.Drawing.Rectangle(0, 0, $canvas.Width, $canvas.Height)))
# 保存
$canvas.Save("ファイルパス", [System.Drawing.Imaging.ImageFormat]::"ImageFormat クラスのプロパティより選択")
# オブジェクトの破棄
$graphics.Dispose()
$canvas.Dispose()
$image.Dispose()
縮小の例
デスクトップの hoge.jpg を 幅と高さを 50% にして hoge_resize.jpg として保存する例
# アセンブリの読み込み
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# 画像ファイルの読み込み
$image = New-Object System.Drawing.Bitmap("C:\Users\miyamiya\Desktop\hoge.jpg")
# 縮小先のオブジェクトを生成
$canvas = New-Object System.Drawing.Bitmap([int]($image.Width / 2), [int]($image.Height / 2))
# 縮小先へ描画
$graphics = [System.Drawing.Graphics]::FromImage($canvas)
$graphics.DrawImage($image, (New-Object System.Drawing.Rectangle(0, 0, $canvas.Width, $canvas.Height)))
# 保存
$canvas.Save("C:\Users\miyamiya\Desktop\hoge_resize.jpg", [System.Drawing.Imaging.ImageFormat]::Jpeg)
# オブジェクトの破棄
$graphics.Dispose()
$canvas.Dispose()
$image.Dispose()
ディスカッション
ピンバック & トラックバック一覧
[…] 先日、PowerShell で画像の回転、リサイズを行う としてブログを書いたのですが、PowerShell の練習がてら、使い道不明な自己満足ライブラリを書いてみました。 […]