Paws/ShellScripts/split-sprites.sh

63 lines
1.7 KiB
Bash
Executable file

#!/bin/bash
# Function to display help message
function usage {
echo "Usage: $0 -i image_path [-s width height] [-n columns rows]"
echo " -i image_path : Path to the sprite sheet image"
echo " -s width height : Size of a single sprite (in pixels)"
echo " -n columns rows : Number of columns and rows in the sprite sheet"
exit 1
}
# Initialize variables
img_path=""
sprite_width=""
sprite_height=""
columns=""
rows=""
# Parse command line options
while getopts "i:s:n:" opt; do
case $opt in
i) img_path=$OPTARG ;;
s)
sprite_width=${OPTARG}
sprite_height=${!OPTIND}
OPTIND=$(($OPTIND + 1))
;;
n)
columns=${OPTARG}
rows=${!OPTIND}
OPTIND=$(($OPTIND + 1))
;;
*) usage ;;
esac
done
# Ensure image path is provided
if [[ -z "$img_path" ]]; then
echo "Error: Image path is required."
usage
fi
# Get image dimensions
img_info=$(magick identify "$img_path")
img_width=$(echo "$img_info" | cut -d ' ' -f 3 | cut -d 'x' -f 1)
img_height=$(echo "$img_info" | cut -d ' ' -f 3 | cut -d 'x' -f 2)
# Calculate sprite width/height from columns/rows, if provided
if [[ -n "$columns" && -n "$rows" ]]; then
sprite_width=$((img_width / columns))
sprite_height=$((img_height / rows))
elif [[ -z "$sprite_width" || -z "$sprite_height" ]]; then
echo "Error: Either sprite size (-s) or number of columns and rows (-n) must be specified."
usage
fi
# Output info
echo "Splitting image $img_path into sprites of size ${sprite_width}x${sprite_height}..."
# Use ImageMagick to split the sprite sheet
magick convert "$img_path" -crop "${sprite_width}x${sprite_height}" +repage sprite_%d.png
echo "Sprites successfully split into individual images (sprite_0.png, sprite_1.png, etc.)"