summaryrefslogtreecommitdiff
path: root/home/xyz/.local/bin/convwall
diff options
context:
space:
mode:
Diffstat (limited to 'home/xyz/.local/bin/convwall')
-rwxr-xr-xhome/xyz/.local/bin/convwall34
1 files changed, 34 insertions, 0 deletions
diff --git a/home/xyz/.local/bin/convwall b/home/xyz/.local/bin/convwall
new file mode 100755
index 00000000..dff9c43b
--- /dev/null
+++ b/home/xyz/.local/bin/convwall
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# 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