Files
ipa-archive/tools/image_optim.sh
2024-02-26 22:03:19 +01:00

53 lines
1.1 KiB
Bash
Executable File

#!/bin/bash
# Convert images from .png to .jpg + reduce resolution + shrink filesize.
MAX_SIZE=128
BATCH_SIZE=50
tmp=()
cd "$(dirname "$0")" || exit
imageOptim() {
open --new --wait-apps --background -b net.pornel.ImageOptim --args "$@"
}
optimize() {
if [ "${#tmp[@]}" -ge "$1" ]; then
echo "imageOptim on ${#tmp[@]} files"
imageOptim "${tmp[@]}"
tmp=()
fi
}
downscale() {
IN_FILE=$1
OUT_FILE=${IN_FILE%.png}.jpg
w=$(sips -g pixelWidth "$IN_FILE" | cut -d: -f2 | tail -1)
if [ "$w" -gt $MAX_SIZE ]; then w=$MAX_SIZE; fi
sips -Z "$w" "$IN_FILE" -s format jpeg -o "$OUT_FILE" 1> /dev/null
tmp+=("$PWD/$OUT_FILE")
optimize $BATCH_SIZE
}
# using glob is fine because filenames do not contain spaces
total=$(echo ../data/*/*.png | wc -w)
total=${total##* }
if [ "$total" -lt 2 ]; then
if [ "$(echo ../data/*/*.png)" = '../data/*/*.png' ]; then
echo "Nothing to do."
exit 0;
fi
fi
i=0
for file in ../data/*/*.png; do
i=$((i+1))
echo "[$i/$total] sips $file"
downscale "$file"
if [ -f "${file%.png}.jpg" ]; then
rm "$file"
fi
done
optimize 1