feat(images): consolidate resize automation workflow - Merge automatic and manual resize scripts - Detect portrait and landscape orientation automatically - Resize portrait images to x1080 - Resize landscape images to 1920px width - Support user-defined ImageMagick resize arguments - Convert JPG/JPEG files to PNG format - Create output directory automatically - Normalize filenames by replacing spaces with underscores - Add date prefix to generated files - Improve reliability with safer dimension detection - Add script documentation and usage examples
98 lines
2.4 KiB
Bash
Executable File
98 lines
2.4 KiB
Bash
Executable File
#!/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/<date>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." |