Я хочу зробити безліч зображень на основі вихідного зображення!
Очевидно, я міг би це зробити вручну в Adobe Photoshop ... і це зайняло б дурну кількість ручного часу.
Ви так праві. Нехай комп'ютер виконує легку повторювану роботу; ось у чому вони хороші. Як зазначається у відповіді Тома Ру , ви можете використовувати ImageMagick
для цього.
Однак є проблема:
На щастя, зображення має роздільну здатність 4: 3, і воно буде добре працювати з усіма роздільними здатностями з однаковою висотою та шириною, тобто 80x80px 100x100px і т.д.
(наголос мій)
Не ясно, яку резолюцію ви хочете - 4: 3, як зазначено, або 1: 1 як мається на увазі.
Однак, виходячи з ваших вимог мінімальної 73px та максимальної 1000px і hundereds резолюцій ; Я написав невеликий сценарій, який повинен охоплювати більшість можливостей (включаючи рідинну зміну розміру за випадковим випадком, який ви хотіли б), який можна встановити, змінивши деякі змінні.
Сценарій, також доступний з пастіна тут для легшого копіювання :
#!/bin/bash
# resizer.sh - resize target image between two resolutions
# accepts file as either first argument or by setting FILEPATH variable
# SETTINGS
SMALLEST_WIDTH=73 # px
LARGEST_WIDTH=1000 # px
FILEPATH= # set if you don't want to pass in image as argument
NUM_OF_RESOLUTIONS=100 # number of images generated; will generate between
# $SMALLEST_WIDTH and $LARGEST_WIDTH
RATIO= # set if you want to specify width/height
# (eg 1/1, 4/3, 16/9), blank is preserve current ratio
# NOTE: resizing to other aspect ratios may be slow/distorty:
# as per http://www.imagemagick.org/Usage/resize/#noaspect
# Seamless resizing (default) may be preferred, see:
# http://www.imagemagick.org/Usage/resize/#liquid-rescale
# but note it is slower, particularly as images get larger
LIQUID=0
# SCRIPT BELOW
# silent by default; uncomment "printf" lines for a description of what is happening
die() { printf "$@\n" 1>&2 ; exit 1; }
if [ -z "$FILEPATH" ]; then
if [ -z "$1" ]; then die "Need to supply file to work on either as argument or by setting FILEPATH!";
else FILE="$1";
fi
else
FILE="$FILEPATH"
fi
# check file exists and is regular file
if [ ! -e "$FILE" ]; then die "$FILE does not exist!"; fi
if [ ! -f "$FILE" ]; then die "$FILE is not a regular file!"; fi
i=0
step=$(echo "($LARGEST_WIDTH - $SMALLEST_WIDTH) / ($NUM_OF_RESOLUTIONS - 1)" | bc -l)
#printf "Resolution step is: %s\n-------------" "$step"
while [ $i -lt $NUM_OF_RESOLUTIONS ]; do
# handle ratio
WIDTH=$(echo "$SMALLEST_WIDTH+($step*$i)" | bc -l)
if [ -z "$RATIO" ]; then
#printf "convert %s -resize %s %s\n" "$FILE" "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
convert "$FILE" -resize "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
else
HEIGHT=$(echo "$WIDTH * $RATIO" | bc -l)
if [ "$LIQUID" -eq 0 ]; then
# Uncomment convert line for distorted ("squashed") resizing
#printf "convert %s -resize %sx%s\! %s\n" "$FILE" "$WIDTH" "$HEIGHT" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
convert "$FILE" -resize "$WIDTH"x"$HEIGHT"\! "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
else
# Liquid resizing: http://www.imagemagick.org/Usage/resize/#liquid-rescale
# fast aspect ration resize first, then liquid
#printf "convert %s -resize %s %s\n" "$FILE" "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
convert "$FILE" -resize "$WIDTH" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
#printf "%s details are now:\n %s\n" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" "$(identify "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}")"
#printf "convert %s -liquid-rescale %sx%s\! %s\n" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" "$WIDTH" "$HEIGHT" "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
convert "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}" -liquid-rescale "$WIDTH"x"$HEIGHT"\! "${FILE%.*}-${WIDTH%.*}px.${FILE##*.}"
fi
fi
(( i++ ))
done
Примітки. Трохи надверху на підрозділах для обчислення значень та іншого, але так. Як зазначалося, printf
рядки можуть коментуватись уявленням про те, що відбувається, інакше воно буде функціонувати безшумно за замовчуванням відповідно до Правила мовчання . Деякі зображення не мають розмірів, які точно розраховані (наприклад, 193px проти 138.54545454545454545452px), оскільки ви не можете корисним чином мати дробові пікселі.