이미지를 고정된 대상 픽셀 크기로 조정

이미지를 고정된 대상 픽셀 크기로 조정

입력 크기나 비율에 관계없이 JPG 이미지의 크기를 동일한 전체 픽셀 크기(예: 6MPx)로 줄이고 싶습니다.


물론 크기를 조정할 mogrify수도 있습니다.convert

이것...

mogrify -resize 3000x3000 file.jpg

...3:2 비율의 사진의 경우 6MPx가 됩니다.

그러나 이는 파노라마와 같은 비정상적인 규모에서는 작동하지 않습니다.


Q: 지정된 대상 픽셀 크기를 사용 mogrify/ 가져오는 방법은 무엇입니까?convert

답변1

이를 위해 작은 스크립트를 만들었습니다.

$ cat ~/bin/resize_picture:

#!/bin/bash

set -euo pipefail

usage(){
cat <<EOF
# USAGE:
    resize_picture TARGET_PX FILE...

# EXAMPLES:
    resize_picture 6000000 *.jpg
    find . -type f -name '*.jpg' resize_picture 8000000 {} +
EOF
exit
}

[ $# -lt 2 ] || [ "$1" = "-h" ] && usage

target=$1
shift

for file in "$@"; do
    printf "Processing %s ... " "$file"

    percent=$(
    identify -format '%w %h' -- "$file" \
    | awk -v t="$target" '
        $1*$2 > t  { r=$1/$2; printf "%.0f",sqrt(t*r)/$1*100 }
        $1*$2 <= t {printf "%d",100}
      '
    )

    if [ $percent -lt 100 ] ; then
        mogrify -resize "$percent"% "$file"
        printf 'Done (%d %%)\n' "$percent"
    else
        echo "Nothing to do"
    fi
done

답변2

convert이 작업을 완벽하게 완료했습니다.

종횡비 무시('!' 플래그):

가로 세로 비율 무시('!' 플래그) 원하는 경우 "-resize"를 사용하여 가로 세로 비율을 무시하고 이미지를 왜곡하여 항상 지정된 것과 정확히 동일한 크기의 이미지를 생성하도록 할 수 있습니다. 이는 차원에 문자 "!"를 추가하여 수행됩니다. 불행하게도 이 문자는 때때로 다양한 UNIX 명령줄 셸에서 특별한 목적으로 사용되기도 합니다. 따라서 캐릭터를 보존하려면 어떻게든 캐릭터를 이스케이프 처리해야 할 수도 있습니다.

convert dragon_sm.gif -resize 64x64\! exact_dragon.gif convert terminal.gif -resize 64x64\! exact_terminal.gif

관련 정보