about summary refs log tree commit diff
path: root/sh/convwall
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