blob: 8efd13684d7040b75fa8cc5b7dfb9690c3cc124f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
|