PowerShell画像ファイルにアルファチャンネルを追加するスクリプト

powershell コンピュータ
powershell

エクスプローラーの「送る」から実行を想定しています。

using namespace System.Windows.Forms
using namespace System.Drawing
using namespace System.Drawing.Imaging
using namespace System.IO

# 
# アルファチャンネルを追加
# 

function AddAlpha
{
    Param($srcPath = "", $dstPath = "")
    Write-Host $srcPath
    # 対象ファイルが無い場合終了
    if (-Not (Test-Path -LiteralPath $srcPath)) {
        return 0
    }
    # 出力ファイルが無い場合サフィックスをつけてパス生成
    if ($dstPath -eq "") {
        $suffix = "_rgba"
        $dir = [System.IO.Path]::GetDirectoryName($srcPath)
        $base = [System.IO.Path]::GetFileNameWithoutExtension($srcPath)
        #$ext = [System.IO.Path]::GetExtension($srcPath)
        $ext = ".png"
        $dstPath = Join-Path $dir ($base+$suffix+$ext)
    }
    # 出力ファイルが既に存在する場合削除
    if (Test-Path -LiteralPath $dstPath) {
        Remove-Item -LiteralPath $dstPath
    }
    # 画像の読み込み
    $fs = [FileStream]::new($srcPath, [FileMode]::Open, [FileAccess]::Read)
    $srcBmp = [Bitmap]::FromStream($fs)
    $fs.Close()
    # 画像を作成
    $h = $srcBmp.Height
    $w = $srcBmp.Width
    $dstBmp = [Bitmap]::new($w, $h)
    # 画像を貼り付け
    $g = [Graphics]::FromImage($dstBmp)
    $g.DrawImage($srcBmp, 0, 0, $w, $h)
    $g.Dispose()
    # 画像を保存
    $dstBmp.Save($dstPath, [ImageFormat]::Png)
    # オブジェクトの破棄
    $dstBmp.Dispose()
    $srcBmp.Dispose()
    return 1
}

foreach($arg in $Args) {
    AddAlpha $arg
}

コメント