단일 이미지에서 수백 가지 해상도 생성


8

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

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

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


1) ImgIx와 같은 CDN이있어 이미지 크기를 동적으로 조정합니다. 2) 나는 작은 동물 ($ 15)의 ThumbNailer를 사용하여 이미지를 일괄 처리했습니다. 구성한 "프로파일"을 사용하여 명령 행을 통해 실행하고 명령 행을 통해 호출하면됩니다. 각 해상도마다 별도의 프로필이 필요합니다. 이미지가 1 : 1이고 "지능형"크기 조정 옵션이 필요하지 않기 때문에 ImageMagick이 충분할 것입니다.
일요일

대신 단일 벡터 이미지를 사용할 수 있습니까?
Anonsage

2
다른 크기의 수백 개의 동일한 이미지가 필요한 프로젝트가 궁금합니다. 대답과 관련이 없지만 그럼에도 불구하고 궁금합니다.

2
당신은 SURE 당신이 너무 많은 해상도에서 이미지를 필요? 더 신중하게 다시 생각하십시오. 다른 사람들과 토론하십시오. 어쩌면 이것이 사실 인 어딘가에있는 경우가 있다는 것을 배제 할 수는 없지만 내기해야한다면 "당신이 잘못하고 있습니다"에 내기를 걸었습니다.
o0 '.

@Lohrois는 우리 모두가 필요하지는 않지만, 총 30MB (1000pngs)를 위해 PNG를 사용하지 않는 것은 큰 문제가 아닙니다.
Simon Hayter

답변:


19

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

분명히 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).


1
우우 대박! 방금 테스트를 거쳐 멋지게 작동했지만 슬프게도 1, 2, 3, 4 등의 새로운 파일 레이블 문제가 발생하여 수학이나 이미지를 검사하지 않고도 해상도를 알려주지 않습니다. 당신은 내가 파일 이름, 즉에 추가 해상도 스크립트 적응할 수있는 방법을 아시나요 filename-500x500.png보다는filename-1.png
사이먼 HAYTER

그것은 당신의 만족도에 만족합니다. 설명해 주셔서 감사합니다.보다 구체적인 파일 이름으로 답변을 업데이트하겠습니다. 겠습니까 filename-width.png충분? 모드 중 하나 ( 원래 종횡비 유지 )는 명시 적 높이를 직접 계산하지 않습니다. 를 통해 정보를 쉽게 얻을 수는 identify있지만 원래 종횡비의 경우 이미지 당 추가 호출을 저장합니다.
bertieb

와, 빠른 답변 감사합니다! 그래도 너비는 자동으로 높이와 동일한 숫자를 가정하기 때문에 작업을 수행합니다.
Simon Hayter

4 : 3의 의미와 관련하여 TV 및 모니터에서 볼 수있는 가로 세로 비율은 정사각형입니다. 예 : google.co.uk/… 레터 박스 16 : 9 등이 아닙니다.
Simon Hayter

1
고맙습니다! 들어 봐! .... 당신의 전설, 대본이 훌륭하게 작동합니다! 모든 도움에 감사드립니다.
Simon Hayter

7

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


1
해상도가 4 : 3 종횡비 인 경우 너비가 4 픽셀 인 경우 다시 3 배가됩니다. 또한 80x80 또는 100x100 해상도는 1 : 1 종횡비를 갖습니다. 4 : 3 비율에서 1 : 1 비율로 이동하기 때문에 이미지를 늘이거나 초과 픽셀을 잘라 내야합니다. 그것이 중요한지 확실하지 않지만 이것을 피하기 위해 4 : 3 해상도를 유지할 수는 없습니까?
Geruta

1
해결책이 가능하다는 것을 아는 것은 위안이되지만,이를 달성하는 방법에 대한 답은 아닙니다. 예나 몇 가지 지침으로 답을 넓힐 수 있습니까? 감사.
fixer1234

1) ImageMagic의 일부인 convert.exe를 -resize 옵션과 함께 사용할 수 있습니다. imagemagick.org/discourse-server/viewtopic.php?t=15438
Sun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.