#!/usr/bin/env sh set -e # exit on failure IFS=$(printf '\n\t') # smarter ifs jxl=0 if file "$1" | grep 'JPEG XL'; then jxl="$1" out=$(mktemp --suffix=.jpg) djxl "$1" "$out" shift set -- "$out" "$@" fi test "$RATIOW" || RATIOW=16 test "$RATIOH" || RATIOH=9 imageh=$(identify -format %h "$1") imagew=$(identify -format %w "$1") des_ratio=$(printf '3 k %u %u / p' "$RATIOW" "$RATIOH" | dc) img_ratio=$(printf '3 k %u %u / p' "$imagew" "$imageh" | dc) wide="$(echo "$img_ratio > $des_ratio" | bc )" if [ "$wide" -gt 0 ] ; then backup=$(mktemp) mv "$1" "$backup" jpegtran -rotate 90 -outfile "$1" "$backup" imageh=$(identify -format %h "$1") imagew=$(identify -format %w "$1") des_ratio=$(printf '3 k %u %u / p' "$RATIOH" "$RATIOW" | dc) fi des_width=$(printf '1 k %f %u * p' "$des_ratio" "$imageh" | dc | cut -d. -f1) offset=$(printf '%u %u - 2 / p' "$des_width" "$imagew" | dc) outfile="$(dirname "$1")/tran_$(basename "$1")" test "$REFLECT" && mode=r || mode=f jpegtran -crop "$des_width$mode+$offset" -outfile "$outfile" "$1" if [ "$wide" -gt 0 ] ; then mv "$backup" "$1" jpegtran -rotate 270 -outfile "$outfile" "$outfile" fi if [ "$jxl" != 0 ]; then cjxl -e 8 "$outfile" "tran_$jxl" rm "$outfile" "$1" fi