PowerShellのスクリプトにパイプラインでファイルを渡すサンプルスクリプトです。
副次的な効果なのですが、グレースケール画像がRGBA形式で保存されます。
スクリプト
ファイル名:ConvertTo-Png.ps1
<#
.SYNOPSIS
画像ファイルをPngファイルに変更する
.PARAMETER Path
変換元画像ファイルのパスを指定。
.PARAMETER Destination
変換後の画像ファイルの保存ディレクトリを指定。デフォルト:カレントディレクトリ
.PARAMETER Help
ヘルプメッセージを表示。
.INPUTS
String または System.IO.FileSystemInfo
.OUTPUTS
String 変換後の画像ファイルのパス
.EXAMPLE
PS> .\ConvertTo-Png.ps1 -Path "~/Pictures/hoge.jpg" -Destination "./"
.EXAMPLE
PS> "~/Pictures/foo.jpg", "~/Pictures/bar.jpg" | .\ConvertTo-Png.ps1 -Destination "./"
.EXAMPLE
PS> ls "~/Pictures/*.jpg" | .\ConvertTo-Png.ps1 -Destination "./"
#>
Param(
[string]$Path,
[string]$Destination = ".",
[switch]$Help
)
function ConvertTo-Png
{
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline=$true,Mandatory=$true)]
[string[]]
$path,
[Parameter(ValueFromPipeline=$false,Mandatory=$true)]
[string[]]
$destination
)
begin {}
process
{
foreach ($p in $Path)
{
$base = [System.IO.Path]::GetFileNameWithoutExtension($p)
$outFile = Join-Path $destination ($base + ".png")
$bmp = [System.Drawing.Image]::FromFile($p)
$bmp.Save($outFile, [System.Drawing.Imaging.ImageFormat]::Png)
$bmp.Dispose()
$outFile
}
}
end {}
}
if ("." -eq $Destination) { $Destination = pwd }
$args = @($input)
if ($Help -Or ( -Not $Path -And $args.Count -eq 0))
{
Get-Help $PSCommandPath
Exit 1
}
if ($args.Count -gt 0)
{
if ($args[0] -is [System.IO.FileSystemInfo])
{
$args | % { $_.FullName } | ConvertTo-Png -destination $Destination
}
else
{
$args | ConvertTo-Png -destination $Destination
}
}
else
{
ConvertTo-Png -path $Path -destination $Destination
}
コメント