m0r1_39’s blog

個人的な備忘録。誰かの参考になれば。

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 $縮小した画像の保存先