Files
poprhythm 2ed392d466 Skip images already processed by checking embedded JPEG comment
Replace pixel dimension check with a JPEG comment check. Processed
files are marked with 'magick:resize=8mp,quality=85,sampling=4:2:0'
via -set comment after -strip, so future runs skip them entirely.
2026-05-02 19:32:18 -04:00

33 lines
1.1 KiB
Bash
Executable File

#!/bin/bash
#
# images_resize Resizing large JPGs in current directory
# Based on: https://shkspr.mobi/blog/2016/12/converting-rar-to-zip-in-linux/
#
# Usage: xxx.sh
echo "Resizing large JPGs in $(pwd)"
MAX_PIXELS=8000000
MAGICK_COMMENT="magick:resize=8mp,quality=85,sampling=4:2:0"
find . -regextype posix-egrep -regex ".*\.(jpg|JPG|JPEG|jpeg)$" -print0 | while IFS= read -r -d '' f
do
# Skip files already processed with these parameters
COMMENT=$(~/Applications/magick identify -format "%c" "$f" 2>/dev/null)
if [[ "$COMMENT" == "$MAGICK_COMMENT" ]]; then
echo "Skipping $f: already processed"
continue
fi
# Get file size before resizing
SIZE_BEFORE=$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f" 2>/dev/null)
~/Applications/magick "$f" -resize "${MAX_PIXELS}@@\>" -sampling-factor 4:2:0 -strip -quality 85% -set comment "$MAGICK_COMMENT" "$f"
# Get file size after resizing
SIZE_AFTER=$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f" 2>/dev/null)
# Display before/after sizes
echo "Resized $f: $(numfmt --to=iec-i --suffix=B $SIZE_BEFORE) -> $(numfmt --to=iec-i --suffix=B $SIZE_AFTER)"
done