2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellで画像縮小スクリプト

Last updated at Posted at 2024-06-09

処理内容

$folderPath 配下の全ファイルを再帰的に取得し、下記ルールに従って縮小する
・画像が横長かつ横幅が800px超過の場合、横幅が800pxになるように縮小
・画像が縦長かつ横幅が1200px超過の場合、横幅が1200pxになるように縮小

ソースコード

# アセンブリの読み込み
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")

# 画像ファイルの縮小処理を実行するフォルダパス
$folderPath = "C:\hoge"

#-----------------------------------------------------------
# 画像ファイルのサイズを変更
#-----------------------------------------------------------

# 画像ファイルの拡張子一覧を配列に格納して取得
$imageExtensions = @("*.jpg", "*.jpeg", "*.png", "*.bmp")

foreach ($extension in $imageExtensions) {
    Get-ChildItem -File -Path $folderPath -Filter $extension -Recurse | ForEach-Object {
        Write-Host $_.FullName

        $image = [System.Drawing.Image]::FromFile($_.FullName)
        try {
            # 画像がタテ長(Portrait)であるかを判別する変数 isPortrait
            $isPortrait = $image.Height -gt $image.Width

            # 画像がタテ長、かつ横幅が800pxより大きい場合
            if ($isPortrait -and $image.Width -gt 800) {
                $ratio = $image.Height / $image.Width
                $newWidth = 800
                $newHeight = [math]::Round($newWidth * $ratio)
            }
            # 画像がヨコ長、かつ横幅が1200pxより大きい場合
            elseif (-not $isPortrait -and $image.Width -gt 1200) {
                $ratio = $image.Height / $image.Width
                $newWidth = 1200
                $newHeight = [math]::Round($newWidth * $ratio)
            }
            #-------------------------------
            # 画像サイズを変更して上書き保存
            #-------------------------------
            $canvas = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
            if($canvas){
                $graphics = [System.Drawing.Graphics]::FromImage($canvas)
                $graphics.DrawImage($image, (New-Object System.Drawing.Rectangle(0, 0, $canvas.Width, $canvas.Height)))
                $image.Dispose()
                # Resizeデータの保存
                $canvas.Save($_.FullName, [System.Drawing.Imaging.ImageFormat]::Jpeg)

                $graphics.Dispose()
                $canvas.Dispose()

            }else{
                echo "変数 canvas が存在しません。"
            }
        }

        finally {
            $image.Dispose()
        }
    }
}

作成時のメモ

・[System.drawing.Image] の GetThumbnailImage は画質が落ちたので、
 [System.Drawing.Graphics]オブジェクトを使用する方針に変更

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?