PowerShell画像ファイルのDPIを一括変更するスクリプト

powershell コンピュータ
powershell
ファイル名:Change-DPI.ps1

<#
.SYNOPSIS
 画像ファイルのDPIを一括変更するスクリプト

.PARAMETER InDir
 画像ファイルが格納されたディレクトリ

.PARAMETER Filter
 ファイル名の絞り込みフィルタ(例.*.png)

.PARAMETER DPI
 設定するDPI

.PARAMETER OutDir
 画像の主力先ディレクトリ

#>
using namespace System.Drawing

param(
    [string]$InDir = "",
    [string]$Filter="*.*",
    [float]$DPI = 144.0,
    [string]$OutDir="."
)

if (($InDir.Length -eq 0) -or (-not (Test-Path -LiteralPath $InDir))) {
    Exit
}

ls -LiteralPath $InDir -Filter $Filter | % {
    
    $bmp = [Bitmap]::FromFile($_.FullName)

    $newBmp = [Bitmap]::new($bmp.Width, $bmp.Height)
    $newBmp.SetResolution($DPI, $DPI)

    $g = [Graphics]::FromImage($newBmp)
    $g.DrawImage($bmp, 0, 0, $bmp.Width, $bmp.Height);
    $g.Dispose()


    if (($OutDir -eq ".") -or ($OutDir.Length -eq 0)) {
        $OutDir = (Get-location).Path
    }
    $outPath =  (Join-Path $OutDir $_.Name)
    $newBmp.Save($outPath, $bmp.RawFormat.Guid)
    
    $bmp.Dispose()
    $newBmp.Dispose()

    $outPath
}

コメント