dotfiles/bin/padjpeg

47 lines
1.2 KiB
Bash
Executable File

#!/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