#!/bin/bash
# Monday, 01/24/2022
################################################################################
# Help #
################################################################################
Help()
{
echo ""
echo "Converts a PNG file:"
echo "Formats include:"
echo ""
echo "JPG, WEBP, AVIF and JXL"
echo ""
echo "If you are starting with a transparent PNG,"
echo "rename the file to end with"
echo "_T.png"
echo "prior to conversions."
echo ""
echo
}
while getopts ":h" option; do
case $option in
h) # display Help
Help
exit;;
esac
done
if [[ "$DISPLAY" && "$(which Xdialog 2>&1 | grep -v "which: no")" ]]; then
dialog="Xdialog"
else
dialog="dialog"
fi
if [ ! -e "$1" ]; then
$dialog --title "No File Specified" --msgbox "\nMust be passed a PNG file\n" 10 36
exit
fi
ISPNG=`identify "$1" | cut -d " " -f 2`
if [ ! "$ISPNG" = "PNG" ]; then
$dialog --title "Not a PNG" --msgbox "\nThe file does not appear\nto be a valid PNG.\n" 10 36
exit
fi
pth=`dirname "$1"`
cd $pth
echo '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
uf3PHv8DFMHdkAeXazMAAAAASUVORK5CYII=
' | base64 -d > /tmp/icon.png
tmpfile=/tmp/1.png
cp -f "$1" "$tmpfile" 2> /dev/null
# to get rid of png color profile errors
mogrify -strip "$tmpfile" 2>/dev/null
bname=$(basename "$1")
isOpaque=`identify -format '%[opaque]' $tmpfile`
# first, if NOT transparent
if [ isOpaque == true ]; then
if [[ "$bname" =~ "_T.png" ]]; then
noAlpha=`echo "$bname" | sed 's/\_T.png/\.png/'`
toAlpha="$(echo "$noAlpha" | sed 's/ /_/g')"
newname="$pth/$noAlpha"
else
newname="$(echo "$bname" | sed 's/ /_/g')"
newname="$pth/$newname"
fi
# if transparent
else
if [[ "$bname" =~ "_T.png" ]]; then
newname="$(echo "$bname" | sed 's/ /_/g')"
newname="$pth/$newname"
else
toAlpha=`echo "$bname" | sed 's/\.png/\_T.png/'`
toAlpha="$(echo "$toAlpha" | sed 's/ /_/g')"
newname="$pth/$toAlpha"
fi
fi
function CLOSE_EXIT()
{
echo "Close and exit..."
# stop any of the conversions...
killall -9 cwebp 2>/dev/null
killall -9 avifenc 2>/dev/null
killall -9 convert 2>/dev/null
killall -9 cjxl 2>/dev/null
# dump the dialog
kill $(ps aux | grep 'yad' | awk '{print $2}') 2>/dev/null
pkill -f $0
} ; export -f CLOSE_EXIT
start_process () {
if [[ ! "$newname" =~ "_T.png" ]]; then
jname=`echo "$newname" | sed 's/\.png/\.jpg/'`
wname=`echo "$newname" | sed 's/\.png/\.webp/'`
avname=`echo "$newname" | sed 's/\.png/\.avif/'`
xlname=`echo "$newname" | sed 's/\.png/\.jxl/'`
cwebp -q 90 "$tmpfile" -o "$wname"
avifenc --min 30 --max 30 "$tmpfile" "$avname"
cjxl "$tmpfile" "$xlname" -q 85
convert -background white -alpha remove -flatten -quality 85 "$newname" "$jname"
echo "Done."
rm -f /tmp/icon.png 2>/dev/null
exit 0
fi
# leaves script already if we did not start with a transparent PNG
##################################################################################################
flatpng=`echo "$newname" | sed 's/\_T.png/\.png/'`
jname=`echo "$flatpng" | sed 's/\.png/\.jpg/'`
wname=`echo "$flatpng" | sed 's/\.png/\.webp/'`
avname=`echo "$flatpng" | sed 's/\.png/\.avif/'`
xlname=`echo "$flatpng" | sed 's/\.png/\.jxl/'`
cwebp -q 90 "$tmpfile" -o "$wname"
avifenc --min 30 --max 30 "$tmpfile" "$avname"
cjxl "$tmpfile" "$xlname" -q 85
convert -background white -alpha remove "$tmpfile" "$flatpng"
convert -quality 85 "$flatpng" "$jname"
rm -f /tmp/icon.png 2>/dev/null
rm -f $tmpfile
echo "Done."
}
yad --info --width=400 --title="Converting" --on-top --window-icon="/tmp/icon.png" --text-align center --button="EXIT:bash -c CLOSE_EXIT" --text="\n\nNow converting to\n\nwebp, jpeg, \navif and jxl \n\nThis dialog will close when complete...\n(clicking EXIT will stop conversions)\n\n\n\nIf you start with a transparent PNG,\nthen rename it to end with\n_T.png\nprior to conversions." &
start_process
sleep 2
kill $(ps aux | grep 'yad' | awk '{print $2}') 2>/dev/null