53 lines
1.1 KiB
Bash
Executable File
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
|