aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/helpers/thumbnails
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/helpers/thumbnails')
-rwxr-xr-xbootstrap/helpers/thumbnails62
1 files changed, 62 insertions, 0 deletions
diff --git a/bootstrap/helpers/thumbnails b/bootstrap/helpers/thumbnails
new file mode 100755
index 0000000..e10d5d3
--- /dev/null
+++ b/bootstrap/helpers/thumbnails
@@ -0,0 +1,62 @@
+#!/bin/sh -eu
+
+timestamp='.update-thumbnails'
+directory='images'
+jpegoptim='jpegoptim --strip-all --verbose'
+jpegoptim_images="$jpegoptim --max 80"
+jpegoptim_thumbnails="$jpegoptim --max 20"
+pngquant='pngquant --skip-if-larger --strip --verbose --ext .png --force'
+pngquant_images="$pngquant --quality 80"
+pngquant_thumbnails="$pngquant --quality 20"
+cwebp='cwebp -m 6'
+cwebp_images="$cwebp -near_lossless 0 -q 80"
+cwebp_thumbnails="$cwebp -q 20"
+gif2webp='gif2webp -min_size -loop_compatibility -metadata none -m 6 -q 80'
+gifsicle='gifsicle --optimize=3 --crop 270x160 --colors=64 --lossy=100'
+mogrify_thumbnails='mogrify -path thumbnails -auto-orient -quiet -thumbnail x222'
+
+cd "$directory" || exit 1;
+mkdir -p thumbnails;
+
+for image in *; do
+
+ file=$(file --mime-type "$image")
+ name=${image%.*}
+ mime=${file#*: }
+
+ if test "$image" -nt "$timestamp"; then
+
+ while [ "$mime" = "image/png" ] || [ "$mime" = "image/jpeg" ]; do
+ { [ -f "$name.png" ] && [ -f "$name.jpg" ]; } && break;
+ mogrify -format jpg -quiet "$name.png" || true;
+ mogrify -format png -quiet "$name.jpg" || true;
+ done
+
+ if [ "$mime" = "image/png" ] || [ "$mime" = "image/png" ]; then
+
+ $pngquant_images "$name.png" || true;
+ $mogrify_thumbnails "$name.png";
+ $pngquant_thumbnails "thumbnails/$name.png" || true;
+
+ $jpegoptim_images "$name.jpg";
+ $mogrify_thumbnails "$name.jpg";
+ $jpegoptim_thumbnails "thumbnails/$name.jpg";
+
+ if [ "$(wc -c < "$name.png")" -lt "$(wc -c < "$name.jpg")" ]; then
+ $cwebp_images "$name.png" -o "$name.webp";
+ $cwebp_thumbnails "thumbnails/$name.png" -o "thumbnails/$name.webp";
+ else
+ $cwebp_images "$name.jpg" -o "$name.webp";
+ $cwebp_thumbnails "thumbnails/$name.jpg" -o "thumbnails/$name.webp";
+ fi
+ fi
+
+ if [ "$mime" = "image/gif" ]; then
+ $gif2webp "$image" -o "$name.webp";
+ $gifsicle "$image" "#0-50" -o "thumbnails/$image";
+ fi
+ fi
+done
+
+touch "$timestamp";
+printf "Images and thumbnails in '%s' updated.\n" "$PWD";