Pipelines/PNG.ps1

function Get-FoPNGPipeline {
    param([hashtable]$Context)

    $s = $Context.Settings
    $level = $s.Level
    $leanify = Get-FoLeanifyIterations -Level $level -Override $s.LeanifyIterations
    $wolf = Get-FoLeanifyIterations -Level $level -Override $s.PNGWolfIterations
    $oxi = Get-FoOxiPngLevel -Level $level
    $steps = @()

    if ($Context.IsAPNG) {
        $steps += New-FoStep -Name 'apngopt (1/16)' -Executable 'apngopt.exe' -Arguments '%INPUTFILE% %TMPOUTPUTFILE%' -Mode TempOutput
    }

    if ($s.PNGAllowLossy -and -not $Context.IsAPNG) {
        $pq = if ($s.PNGCopyMetadata) { '' } else { '--strip ' }
        $steps += New-FoStep -Name 'pngquant (2/16)' -Executable 'pngquant.exe' -Arguments "$pq--quality=85-95 --speed 1 --ext .png --force %TMPINPUTFILE%" -Mode TempInput -Gate { -not $args[0].IsAPNG }
    }

    if (-not $Context.IsPNG9Patch) {
        $po = if ($s.PNGCopyMetadata) { '-KeepPhysicalPixelDimensions ' } else { '' }
        $steps += New-FoStep -Name 'PngOptimizer (3/16)' -Executable 'PngOptimizer.exe' -Arguments "${po}-file:%TMPINPUTFILE%" -Mode TempInput
    }

    if (-not $Context.IsAPNG -and -not $Context.IsPNG9Patch -and $Context.Extension -ne '.ico') {
        $tp = Get-FoTruePngLevel -Level $level
        $tf = if ($s.PNGCopyMetadata) { '-md keep all ' } else { '-tz -md remove all -a1 -g1 ' }
        if ($s.PNGAllowLossy) { $tf += '-l ' }
        $steps += New-FoStep -Name 'TruePNG (4/16)' -Executable 'truepng.exe' -Arguments "-o$tp $tf/i0 /nc /tz /quiet /y /out %TMPOUTPUTFILE% %INPUTFILE%" -Mode TempOutput
        $pn = Get-FoPngOutLevel -Level $level
        $pk = if ($s.PNGCopyMetadata) { '/k1 ' } else { '/kacTL,fcTL,fdAT ' }
        $steps += New-FoStep -Name 'PNGOut (5/16)' -Executable 'pngout.exe' -Arguments "/q /y /r /d0 /mincodes0 $pk/s$pn %INPUTFILE% %TMPOUTPUTFILE%" -Mode TempOutput
    }

    $strip = if ($Context.IsAPNG) { '--strip safe ' } elseif (-not $s.PNGCopyMetadata) { '--strip all ' } else { '--strip safe ' }
    $lossy = if ($s.PNGAllowLossy) { '--scale16 ' } else { '' }
    $steps += New-FoStep -Name 'OxiPNG (6/16)' -Executable 'oxipng.exe' -Arguments "--zopfli --alpha --quiet -o$oxi $lossy$strip%TMPINPUTFILE%" -Mode TempInput

    if (-not $Context.IsAPNG -and -not $s.PNGCopyMetadata) {
        $steps += New-FoStep -Name 'Leanify (8/16)' -Executable 'leanify.exe' -Arguments "-q -p -i $leanify %TMPINPUTFILE%" -Mode TempInput
        $steps += New-FoStep -Name 'pngwolf (9/16)' -Executable 'pngwolf.exe' -Arguments "--out-deflate=zopfli,iter=$wolf --in=%INPUTFILE% --out=%TMPOUTPUTFILE%" -Mode TempOutput
    }

    if (-not $Context.IsAPNG -and -not $Context.IsPNG9Patch) {
        $steps += New-FoStep -Name 'pngrewrite (10/16)' -Executable 'pngrewrite.exe' -Arguments '%INPUTFILE% %TMPOUTPUTFILE%' -Mode TempOutput
        if (-not $s.PNGCopyMetadata) {
            $steps += New-FoStep -Name 'advpng (11/16)' -Executable 'advpng.exe' -Arguments "-z -q -4 -i $leanify %TMPINPUTFILE%" -Mode TempInput
        }
    }

    $ect = Get-FoECTPreset -Level $level
    $reuse = if ($Context.IsAPNG) { '--reuse ' } else { '' }
    $steps += New-FoStep -Name 'ECT (12/16)' -Executable 'ECT.exe' -Arguments "-quiet --mt-deflate --mt-file --allfilters -png $reuse$ect %TMPINPUTFILE%" -Mode TempInput
    $steps += New-FoStep -Name 'pingo (13/16)' -Executable 'pingo.exe' -Arguments '-s9 -png %TMPINPUTFILE%' -Mode TempInput

    if (-not $Context.IsAPNG -and -not $Context.IsPNG9Patch) {
        $steps += New-FoStep -Name 'DeflOpt (14/16)' -Executable 'deflopt.exe' -Arguments '/a /b /s %TMPINPUTFILE%' -Mode TempInput
    }

    $steps += New-FoStep -Name 'defluff (15/16)' -Handler 'DefluffPipe' -Mode TempOutput

    if (-not $Context.IsAPNG -and -not $Context.IsPNG9Patch) {
        $steps += New-FoStep -Name 'DeflOpt (16/16)' -Executable 'deflopt.exe' -Arguments '/a /b /s %TMPINPUTFILE%' -Mode TempInput
    }

    return $steps
}