#!/bin/bash ############################################################################### # Script Name: resize-images.sh # # Description: # Resizes JPG/JPEG images and converts them to PNG format. # # When no resize argument is supplied: # - Portrait images are resized to fit within 1080px height (x1080) # - Landscape images are resized to fit within 1920px width (1920) # # When a resize argument is supplied: # - The supplied resize value is used for all images. # # Additional features: # - Creates output directory NEW/ automatically. # - Optionally normalizes filenames by replacing spaces with underscores. # - Adds an optional date prefix to generated filenames. # - Converts JPG/JPEG images to PNG. # # Requirements: # - Bash # - ImageMagick (identify, convert) # # Usage: # # Automatic portrait/landscape sizing: # ./resize-images.sh # # Resize all images to width 2560: # ./resize-images.sh 2560 # # Resize all images to height 1440: # ./resize-images.sh x1440 # # Output: # NEW/filename.png # ############################################################################### DATE=$(date +"%d%m%y_") DEFAULT_RESIZE="auto" # Use supplied resize value or automatic mode if [[ -n "${1:-}" ]]; then DEFAULT_RESIZE="$1" fi # Create output directory mkdir -p NEW for file in *.jpg *.jpeg *.JPG *.JPEG; do [[ -f "$file" ]] || continue # Replace spaces in filenames file_new="$(echo "$file" | tr ' ' '_')" if [[ "$file_new" != "$file" ]]; then echo "Rename: $file -> $file_new" mv "$file" "$file_new" fi resize_var="$DEFAULT_RESIZE" # Automatic resize mode if [[ "$resize_var" == "auto" ]]; then dimensions=$(identify -quiet -format "%wx%h" "$file_new" 2>/dev/null) width=${dimensions%x*} height=${dimensions#*x} if [[ -n "$width" && -n "$height" ]]; then if (( height > width )); then resize_var="x1080" else resize_var="1920" fi else echo "Skipping invalid image: $file_new" continue fi fi output="NEW/${DATE}$(basename "${file_new%.*}").png" echo "Transform: $file_new -> $output ($resize_var)" convert -quiet \ "$file_new" \ -resize "$resize_var" \ "$output" done echo "Finished."