エクスプローラーの「送る」から実行を想定しています。
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
}
コメント