Files
Lucas Vivohost aa48304220 feat(images): unify image resize and PNG conversion scripts
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
2026-09-14 12:43:38 +02:00

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."