Windows10標準機能で画像を一括リサイズ
Windows10標準機能で画像を一括リサイズするスクリプトのメモ。
フリーソフトとか使えればいいんですけどね。使えない場合に。
BATファイルとPowerShellを組合せてBATファイルにフォルダをドロップで一括変換。
対象フォルダ配下に [リサイズ] フォルダを作成してリサイズした画像を保存する。
以下2サイトを参考に自分が使いやすいよう変更してみた。
(参考)
1)Windows 7 - MS Paintで画像を一括、あるいは自動で圧縮したい(120216)|teratail
2)メモ:PowerShellで画像をリサイズする - imihitoのブログ
BATファイル名は任意。
PowerShellスクリプトファイル名は呼出しの関係で image-resize.ps1。
BATファイルとPowerShellスクリプトは同じフォルダ内に配置。
1)BATファイル
@echo off
cls echo. echo ■===============■ echo ■ 画像一括リサイズスクリプト ■ echo ■===============■ echo. if "%1"=="" ( goto ERR ) if exist "%1" ( goto PROCESS ) else ( goto ERR ) :PROCESS echo 画像の横幅(px)を指定してください。(縦幅は自動計算) set /P my_ImageWidth= echo. Powershell -ExecutionPolicy RemoteSigned -File "%~dp0image-resize.ps1" %1 %my_ImageWidth% echo. pause exit :ERR echo. echo 【フォルダをドロップしてください】 echo. echo. pause exit
2)PowerShellスクリプトファイル
# 設定項目 [string]$画像の保存されているフォルダ = $args[0] [string]$縮小した画像の保存先 = '{0}[リサイズ]' -f $画像の保存されているフォルダ [int]$画像の横幅 = $args[1] #px [string]$元の画像の拡張子 = '*.jpg' # 画像操作に必要なライブラリ読み込み Add-Type -AssemblyName System.Drawing [Drawing.Imaging.ImageFormat]$縮小後画像の形式 = [Drawing.Imaging.ImageFormat]::Jpeg # 出力先のフォルダを作成(すでにある場合は何もしない) [IO.Directory]::CreateDirectory( $縮小した画像の保存先 ) > $null # $画像の保存されているフォルダ の中から、$元の画像の拡張子 でフィルターしたものを探す Get-ChildItem -LiteralPath $画像の保存されているフォルダ -Filter $元の画像の拡張子 | %{ # 見つかったものそれぞれに対して処理 ( $_ -is [IO.FileInfo] ) # 元となる画像読み込み [Drawing.Bitmap]$srcBmp = [Drawing.Bitmap]::FromFile($_.FullName) # 画像のメタデータ(撮影日時など)取得 [Drawing.Imaging.PropertyItem[]]$props = $srcBmp.PropertyItems # 新しい画像の大きさを計算 [int]$newWidth = $画像の横幅 [int]$newHeight = [int]( ($srcBmp.Height / $srcBmp.Width) * $newWidth ) # 縮小した画像を作成(メモリ内) [Drawing.Bitmap]$destBmp = New-Object -TypeName Drawing.Bitmap -ArgumentList $srcBmp, $newWidth, $newHeight # 画像のメタデータ(撮影日時など)設定 $props | %{ $destBmp.SetPropertyItem( $_ ) <# $_ -is [Drawing.Imaging.PropertyItem] #> } # 縮小した画像の保存先 [string]$destPath = [IO.Path]::Combine( $縮小した画像の保存先, [IO.Path]::ChangeExtension($_.Name, $縮小後画像の形式.ToString())) # ファイルの存在確認 if ( Test-Path -LiteralPath $destPath ) { Write-Host ('「{0}」はすでに存在しています。' -f [IO.Path]::GetFileName($destPath)) } else { # $縮小後画像の形式 で保存 $destBmp.Save($destPath, $縮小後画像の形式) Write-Host ('「{0}」を「{1}」として保存しました。' -f $_.Name, [IO.Path]::GetFileName($destPath)) } # 片付け $destBmp.Dispose() $srcBmp.Dispose() } # 保存したフォルダを開く explorer.exe $縮小した画像の保存先