mirror of
https://github.com/SerenityOS/serenity
synced 2024-11-05 17:46:52 +00:00
2c6e3ea2e9
This uses optipng to check how much size can be reduced on PNG files. If that's more than 2 KiB for at least one file, the check fails. As with other checks, it doesn't run if optipng is not installed.
42 lines
1.6 KiB
Bash
Executable file
42 lines
1.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -eo pipefail
|
|
|
|
# How many bytes optipng has to be able to strip out of the file for the optimization to be worth it. The default is 1 KiB.
|
|
: "${MINIMUM_OPTIMIZATION_BYTES:=1024}"
|
|
|
|
script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
|
cd "${script_path}/.."
|
|
|
|
if ! command -v optipng >/dev/null ; then
|
|
echo 'optipng is not installed, skipping png size check.'
|
|
echo 'Please install optipng for your system to run this check.'
|
|
exit 0
|
|
fi
|
|
|
|
files=()
|
|
for file in "$@"; do
|
|
if [[ "${file}" == *".png" ]]; then
|
|
files+=("${file}")
|
|
fi
|
|
done
|
|
|
|
if (( ${#files[@]} )); then
|
|
# We need to allow optipng to write output so we can check what it actually did. We use a dummy file that's discarded afterwards.
|
|
optimizations=$( printf '%s\0' "${files[@]}" |\
|
|
xargs -0 -n1 optipng -strip all -out dummy-optipng-output.png -clobber 2>&1 |\
|
|
grep -i -e 'Output IDAT size =' |\
|
|
sed -E 's/Output IDAT size = [0-9]+ byte(s?) \(([0-9]+) byte(s?) decrease\)/\2/g;s/Output IDAT size = [0-9]+ byte(s?) \(no change\)/0/g' |\
|
|
awk "{ if (\$1 >= $MINIMUM_OPTIMIZATION_BYTES) { S+=\$1 } } END { print S }")
|
|
rm -f dummy-optipng-output.png dummy-optipng-output.png.bak
|
|
optimizations="${optimizations:-0}"
|
|
|
|
if [[ "$optimizations" -ne 0 ]] ; then
|
|
echo "There are non-optimized PNG images in Base/. It is possible to reduce file sizes by at least $optimizations byte(s)."
|
|
# shellcheck disable=SC2016 # we're not trying to expand expressions here
|
|
echo 'Please run optipng with `-strip all` on modified PNG images and try again.'
|
|
exit 1
|
|
fi
|
|
else
|
|
echo 'No PNG images to check.'
|
|
fi
|