画像を固定されたターゲットピクセルサイズに調整

画像を固定されたターゲットピクセルサイズに調整

入力サイズや比率に関係なく、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

おすすめ記事