입력 크기나 비율에 관계없이 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