• copy whichever you want
  • save in text file
  • change extension to bat
  • run from powershell/commandline

if png has rgb colorspace
if png colorspace is not optimized palette
convert to HSB and get saturation
if saturation is lower than 5% convert rgb png to grayscale png
if saturation is higher than 5% convert color png to quality 80 jpg

first version is using only ImageMagick

@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%f in (*.png) do (
    for /f %%c in ('magick identify -format "%%[colorspace]" "%%f"') do (
        if "%%c" EQU "sRGB" (
            for /f %%t in ('magick identify -format "%%[type]" "%%f"') do (
                if "%%t" NEQ "Palette" (
                    for /f %%i in ('magick convert "%%f" -colorspace HSB -channel g -separate +channel -format "%%[fx:round(mean*100)]" info:') do (
                        if %%i LEQ 5 (
                            @echo on
                            echo ""%%f" "%%c" "%%t" "%%i" "grayscale"
                            @echo off
                            magick "%%f" -colorspace gray -quality 100 "%%f"
                        ) else (
                            @echo on
                            echo ""%%f" "%%c" "%%t" "%%i" "color"
                            @echo off
                            magick "%%f" -quality 80 "%%~dnf".jpg
                        )
                    )
                )
            )   
        )
    )
)

second version is using pingo for smallest b&w jpg size

@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%f in (*.png) do (
    for /f %%c in ('magick identify -format "%%[colorspace]" "%%f"') do (
        if "%%c" EQU "sRGB" (
            for /f %%t in ('magick identify -format "%%[type]" "%%f"') do (
                if "%%t" NEQ "Palette" (
                    for /f %%i in ('magick convert "%%f" -colorspace HSB -channel g -separate +channel -format "%%[fx:round(mean*100)]" info:') do (
                        if %%i LEQ 5 (
                            @echo on
                            echo ""%%f" "%%c" "%%t" "%%i" "grayscale"
                            @echo off
                            pingo -sb -strip -grayscale ""%%f"
                        ) else (
                            @echo on
                            echo ""%%f" "%%c" "%%t" "%%i" "color"
                            @echo off
                            pingo -jpgquality=80 "%%f"
                        )
                    )
                )
            )   
        )
    )
)
Edit
Pub: 17 Aug 2021 17:41 UTC
Edit: 18 Aug 2021 14:43 UTC
Views: 526