Images

將圖像縮放到固定的目標像素大小

  • March 30, 2022

無論輸入大小或比率如何,我都想將 JPG 圖像的大小減小到相同的總像素大小(例如 6MPx)。


當然mogrify或者convert可以調整大小:

這個 …

mogrify -resize 3000x3000 file.jpg

…對於比例為 3:2 的圖片,將為我提供 6MPx。

但這不適用於不尋常的比例,例如全景圖。


Q: 如何使用mogrify/convert得到指定的目標像素大小?

我做了一個小腳本來做。

$ 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

引用自:https://unix.stackexchange.com/questions/696646