diff options
Diffstat (limited to 'sh/convwall')
-rwxr-xr-x | sh/convwall | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sh/convwall b/sh/convwall new file mode 100755 index 0000000..8efd136 --- /dev/null +++ b/sh/convwall @@ -0,0 +1,35 @@ +#!/bin/sh +# CONVert WALLpaper + +# target image aspect ratio +wratio=$SCR_WIDTH +hratio=$SCR_HEIGHT +# chop how much from center +chopnum=99% + +# my benchmark shows -ping is much faster than default +# https://github.com/ImageMagick/ImageMagick/issues/3183#issuecomment-800955241 +width=$(identify -ping -format '%w' "$1") +height=$(identify -ping -format '%h' "$1") + +ratio=$((wratio*100/hratio)) +dim=$((width*100/height)) + +if [ "$dim" -ne "$ratio" ]; then + if [ "$dim" -lt "$ratio" ]; then + chopgeom="${chopnum}x0" + width=$((height*wratio/hratio)) + else + chopgeom="0x$chopnum" + height=$((width*hratio/wratio)) + fi + # may throw error "sort: write failed: 'standard output': Broken pipe \n sort: write error" + # caused by head exit (or close stdin) before sort output complete, can ignore + # https://stackoverflow.com/questions/46202653/bash-error-in-sort-sort-write-failed-standard-output-broken-pipe + bgcolor=$(convert "$1" -gravity center -chop "$chopgeom" -define histogram:unique-colors=true -format %c histogram:info:- | sort -rn | head -n1 | awk \{print\ \$3\} | cut -c1-7) + # another approach is to use "$width" or "x$height" for geometry, current approach is more readable + convert "$1" -gravity center -background "$bgcolor" -extent "${width}x$height" "$2" +else + echo 'same aspect ratio, no need to convert' >&2 + exit 1 +fi |