はじめに
画像を縮小したいときってあるけど、縮小専用みたいなソフトウェアを入れるほどでもないってときに、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杯奢ってください。