はじめに
画像を縮小したいときってあるけど、縮小専用みたいなソフトウェアを入れるほどでもないってときに、PowerShellでどうにかできないかなと思ったので試してみた記録です。
どう実現するか
Windows環境でとりあえず使えれば良いが、移行が楽なほうが良いのでなるべく追加ツールを使わない方向性としました。そうなってくるとやっぱり便利なのはPowerShellです。
実装
PowerShellスクリプト
以下のようにスクリプトを書きました。サイズを変更する可能性があるので、引数からサイズを取得する設計としました。
param(
[Parameter(Mandatory=$false)]
[int]$newWidth = 0,
[Parameter(Mandatory=$false)]
[int]$newHeight = 0,
[Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)]
[string[]]$Path
)
# System.Drawingのインポートを行う
Add-Type -AssemblyName System.Drawing
# ファイルパスを順次処理する
foreach ($p in $Path) {
try {
# 画像を読み込む
$image = [System.Drawing.Image]::FromFile($p)
# 縦横比を計算
$ratio = $image.Height / $image.Width
# newWidth または newHeight のみが指定されている場合、縦横比を維持してもう一方を計算
if ($newWidth -gt 0 -and $newHeight -eq 0) {
$newHeight = [int]($newWidth * $ratio)
} elseif ($newHeight -gt 0 -and $newWidth -eq 0) {
$newWidth = [int]($newHeight / $ratio)
}
# 新しいビットマップイメージを作成
$resized = New-Object System.Drawing.Bitmap $newWidth, $newHeight
# グラフィックオブジェクトを作成
$graphic = [System.Drawing.Graphics]::FromImage($resized)
# 画像の品質を設定
$graphic.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
# 画像をリサイズして新しいビットマップに描画
$graphic.DrawImage($image, 0, 0, $newWidth, $newHeight)
# リサイズ後のファイル名を生成
$directory = [System.IO.Path]::GetDirectoryName($p)
$filename = [System.IO.Path]::GetFileNameWithoutExtension($p)
$extension = [System.IO.Path]::GetExtension($p)
$newPath = [System.IO.Path]::Combine($directory, $filename + "_resized" + $extension)
# リサイズした画像を新しいファイル名で保存
$resized.Save($newPath, [System.Drawing.Imaging.ImageFormat]::Jpeg)
} catch {
Write-Error "エラーが発生しました: $_"
} finally {
# オブジェクトを解放
if ($image -ne $null) {
$image.Dispose()
}
if ($resized -ne $null) {
$resized.Dispose()
}
if ($graphic -ne $null) {
$graphic.Dispose()
}
}
}
右クリックメニューに追加
いちいちPowerShellスクリプトを実行するのも難儀なので、右クリックメニューから使えるようにします。ただ、レジストリをいじるのも面倒なので、今回は「送る」メニューから使えるように整えます。
1.Windows + R (ファイル名を指定して実行)で shell:sendto を入力し、SendTo フォルダを開く。
2.右クリックメニューから新規作成>ショートカットをクリックする。
3.ショートカットの作成ウィンドウが起動したことを確認する。
4.「項目の場所を入力してください」に以下を入力する。newWidthのところでサイズを指定します。高さを指定したい場合はnewHightでOKです。
powershell -WindowStyle Hidden -File "作成したPowerShellスクリプトのフルパス" -newWidth 240 -Path
5.「ショートカットの名前を付けてください」に任意の名前を入れる。今回は「画像を縮小する (240サイズ)」としました。
6.[完了] をクリックし、ショートカットの作成ウィンドウを閉じる。
※スクリプトのパスが変更になった等、ショートカットの内容を修正したい場合は、作成したショートカットの右クリックメニュー>プロパティからリンク先を変更してください。
動作確認
1.縮小したい画像を任意のフォルダに配置します。1つでも複数でも構いません。
2.右クリックメニュー>送る に配置したショートカットメニューが表示されていることを確認し、クリックします。
3.スクリプトが実行されれば、画像ファイルと同じフォルダ内に_resizedとファイル名に付与されたファイルが完成しているはずです。
4._resizedとファイル名に付与されたファイルを開いて、縮小されていることを確認します。
おわりに
Windowsの右クリックメニューを使って、画像の縮小を簡単に行う方法でした。今回のように固定サイズであれば、専用のソフトウェア等を使用するより右クリックメニューからサクッとできちゃうほうが楽ちんですね。
ちなみに、Mac OSの場合だとメニューバーからショートカットを使うのが楽かなと思います。
役に立ったなという方はビール1杯奢ってください。