summaryrefslogtreecommitdiff
path: root/wall_gen.sh
diff options
context:
space:
mode:
authorhmj6502 <hashim@hmj6502.com>2025-12-28 20:16:20 +0000
committerhmj6502 <hashim@hmj6502.com>2025-12-28 20:35:35 +0000
commit968935e00f3dca2d0b64ca7eaf1b411c9ad1a344 (patch)
tree9d9eb4344c86323bdf84d09a85811683bf21d1b1 /wall_gen.sh
downloadalbum-wall-968935e00f3dca2d0b64ca7eaf1b411c9ad1a344.tar.gz
album-wall-968935e00f3dca2d0b64ca7eaf1b411c9ad1a344.tar.bz2
album-wall-968935e00f3dca2d0b64ca7eaf1b411c9ad1a344.zip
initial commit
Diffstat (limited to 'wall_gen.sh')
-rwxr-xr-xwall_gen.sh47
1 files changed, 47 insertions, 0 deletions
diff --git a/wall_gen.sh b/wall_gen.sh
new file mode 100755
index 0000000..75b9114
--- /dev/null
+++ b/wall_gen.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# requires imagemagick and colors (https://git.2f30.org/colors/)
+
+# resolution of wallpaper
+XMAX=1920
+YMAX=1080
+
+if ! [ -f "$1" ]; then
+ printf "ERROR: file not found\n"
+ exit 1
+fi
+
+# get resolution of cover
+RES=$(identify "$1" | awk '{print $3}')
+X=$(echo $RES | awk -F "x" '{print $1}')
+Y=$(echo $RES | awk -F "x" '{print $2}')
+
+X_RES=$(echo "$XMAX"/4 | bc) # x to resize to if x > y
+Y_RES=$(echo "$YMAX"/2 | bc) # y to resize to if y > x should be ~400
+FACT= # factor to change scale by; in %; defined next
+
+# FACT will depend on X if cover is squarish, or on Y if it is more rectangular
+if [ $Y -gt $(echo "scale = 0; $X * 1.1 / 1" | bc) ]; then
+ FACT="$(echo "scale = 2; $Y_RES/$Y * 100 / 1" | bc)%" # divide by 1 forces bc to round
+else
+ FACT="$(echo "scale = 2; $X_RES/$X * 100 / 1" | bc)%" # divide by 1 forces bc to round
+fi
+
+mkdir -p /tmp/wall_gen
+# get name and put .png to automatically convert to png if necessary
+NAME=$(echo "$(basename "$1")" | sed -e 's/.jpg/.png/' -e 's/.jpeg/.png/' -e 's/.gif/.png/')
+magick "$1" -resize "$FACT" /tmp/wall_gen/"$NAME"
+FILE="/tmp/wall_gen/$NAME"
+RES=$(identify "$FILE" | awk '{print $3}')
+X=$(echo "$RES" | awk -F "x" '{print $1}')
+Y=$(echo "$RES" | awk -F "x" '{print $2}')
+
+# get how size of border; divide by 2 as border size is only one side's
+XPLUS=$(echo "(1920-$X)/2" | bc)
+YPLUS=$(echo "(1080-$Y)/2" | bc)
+
+COLOR=$(cat "$FILE" | colors -n 1)
+
+NAME="$(echo $NAME | sed 's/.png//')-wall.png"
+
+magick "$FILE" -bordercolor "$COLOR" -border "$XPLUS"x"$YPLUS" /tmp/wall_gen/$NAME
+xwallpaper --zoom /tmp/wall_gen/$NAME