Tôi muốn tạo ra nhiều hình ảnh dựa trên một hình ảnh nguồn!
Rõ ràng là tôi có thể làm điều này bằng tay trong Adobe Photoshop ... và điều này sẽ tốn một khoảng thời gian thủ công ngớ ngẩn.
Bạn rất đúng. Hãy để máy tính làm công việc lặp đi lặp lại dễ dàng; đó là những gì họ giỏi Như câu trả lời của Tom Ruh , bạn có thể sử dụng ImageMagick
cho việc này.
Tuy nhiên, có một vấn đề:
May mắn là hình ảnh có độ phân giải 4: 3 và sẽ hoạt động tốt với tất cả các độ phân giải có cùng chiều cao và chiều rộng, tức là 80x80px 100x100px, v.v.
(nhấn mạnh của tôi)
Không rõ độ phân giải bạn muốn- 4: 3 như đã nêu, hoặc 1: 1 như ngụ ý.
Tuy nhiên, dựa trên yêu cầu của bạn về tối thiểu 73px và tối đa 1000px và hàng trăm độ phân giải ; Tôi đã viết ra một kịch bản nhỏ bao gồm hầu hết các khả năng (bao gồm thay đổi kích thước chất lỏng trong trường hợp bạn muốn như vậy) có thể được đặt bằng cách thay đổi một số biến.
Script, cũng có sẵn từ pastebin ở đây để sao chép dễ dàng hơn :
#!/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
Ghi chú: Một chút trên đầu trang con để tính toán các giá trị và như vậy, nhưng hey ho. Như đã lưu ý, các printf
dòng có thể không bị thiếu đối với một ý tưởng về những gì đang diễn ra, nếu không nó sẽ hoạt động âm thầm theo mặc định theo Quy tắc Im lặng . Một số hình ảnh sẽ không có kích thước chính xác như được tính toán (ví dụ: 193px so với 138.54545454545454545452px) vì bạn không thể theo cách hữu ích có các pixel phân đoạn.