단일 이미지에서 수백 가지 해상도 생성 너비가 같은

여러 해상도의 단일 이미지가 필요한 프로젝트를 진행 중입니다. 운이 좋으면 이미지의 너비 / 높이 해상도가 동일하며 높이와 너비가 같은 모든 해상도 (예 : 80x80px 100x100px 등)에서 잘 작동합니다.

분명히 Adobe Photoshop에서 수동 으로이 작업을 수행 할 수는 있지만 문자 그대로 73px에서 최대 1000px까지 수백 가지의 다른 해상도가 필요하며 이는 수동 시간이 거의 필요하지 않습니다. 인터넷을 검색했는데 계속 많은 시간이 걸리는 썸네일 생성기 또는 Adobe Photoshop 배치 보호기가 계속 제공됩니다.

따라서 Windows 또는 Linux에서 단일 이미지로 수백 개의 해상도를 가능한 한 빨리 만들 수 있습니까?



답변

소스 이미지를 기반으로 많은 이미지를 만들고 싶습니다!

분명히 Adobe Photoshop에서 직접 수작업을 수행 할 수 있습니다.이 작업에는 시간이 많이 걸리지 않습니다.

당신이 정말 맞습니다. 컴퓨터가 쉬운 반복 작업을하도록하십시오. 그것이 그들이 잘하는 것입니다. 으로 톰 RUH의 대답 노트 , 당신은 사용할 수 있습니다 ImageMagick이것을.

그러나 문제가 있습니다.

운 좋게도 이미지는 4 : 3 해상도이며 높이와 너비가 같은 모든 해상도, 즉 80x80px 100x100px 등에서 작동합니다 .

(강조 광산)

설명 된대로 4 : 3 또는 묵시적으로 1 : 1 어떤 해상도를 원하는지는 명확하지 않습니다.

그러나 최소 73px최대 1000px 의 요구 사항 과 해상도의 장애를 기반으로합니다 . 변수를 변경하여 설정할 수있는 대부분의 가능성 ( 원하는 오프 기회에 대한 액체 크기 조정 포함)을 다루는 작은 스크립트를 작성했습니다 .

쉽게 복사 할 수 있도록 스크립트 를 pastebin에서 사용할 수도 있습니다 .

#!/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 vs 138.54545454545454545452px).


답변

명령 행을 처리하고 간단한 BASH 스크립팅을 작성할 수있는 한. ImageMagick 을 사용할 수 있습니다


답변