PowerShellで画像ファイルをjpg形式からpng形式に変換するスクリプト

PowerShell コンピュータ
PowerShell

.NetのImageオブジェクトをファイルから生成してPNG形式で保存します。

使い方はスクリプトの.EXAMPLEを見てください。

<#
.SYNOPSIS
JpegファイルをPngファイルへ変換

.DESCRIPTION
JpegファイルをPngファイルへ変換

.EXAMPLE
Convert-Jpeg2Png.ps1 -Path Jpegファイル -Outdir = "./Output"

.PARAMETER $Path
Jpegファイルのパス

.EXAMPLE
Convert-Jpeg2Png.ps1 -Path "F:\Pictures\00000-2181776672.jpg"

.EXAMPLE
Get-ChildItem "F:\Pictures" -Filter "*.jpg" | Convert-Jpeg2Png.ps1

#>
param(
    [string]
    $Path,
    [string]
    $Outdir = "./Output",
    [switch]
    $Help
)
if ($Help) {
    Get-Help $MyInvocation.MyCommand.Path
    Exit 1
}

Add-Type -AssemblyName System.Drawing

function Convert-Jpeg2Png
{
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
        [string[]]
        $path,
        [Parameter(ValueFromPipeline=$false,Mandatory=$true)]
        [string]
        $odir
    )
    begin {}
    process
    {
        foreach ($p in $path)
        {
            $path = Convert-Path $path
            $odir = Convert-Path $odir

            $fileStr = Split-Path $path -Leaf
            $baseName = [System.IO.Path]::GetFileNameWithoutExtension($fileStr)
            $outFile = (Join-Path $odir ($baseName+".png"))

            $bmp = [System.Drawing.Image]::FromFile($path)
            Write-Output $outFile
            $bmp.Save($outFile, [System.Drawing.Imaging.ImageFormat]::Png)
            $bmp.Dispose(); $bmp = $null
        }
    }
    end {}

        
}


$args = @($input)

if ($Help -Or ( -Not $Path -And $args.Count -eq 0))
{
    Get-Help $PSCommandPath
    Exit 1
}

if (-not (Test-Path $Outdir))
{
    New-Item $Outdir -ItemType Directory | Out-Null
}

if ($args.Count -gt 0)
{
    if ($args[0] -is [System.IO.FileSystemInfo])
    {
        $args | ForEach-Object { $_.FullName } | Convert-Jpeg2Png -odir $Outdir
    }
    else
    {
        $args | Convert-Jpeg2Png -odir $Outdir
    }
}
else
{
    Convert-Jpeg2Png -path $Path -odir $Outdir
}

コメント