aboutsummaryrefslogtreecommitdiff
path: root/makemywall
diff options
context:
space:
mode:
Diffstat (limited to 'makemywall')
-rwxr-xr-xmakemywall68
1 files changed, 47 insertions, 21 deletions
diff --git a/makemywall b/makemywall
index 71c06e4..476db5c 100755
--- a/makemywall
+++ b/makemywall
@@ -28,10 +28,19 @@ set -e
usage() {
cat << EOH
-Usage: $0 [-s] <source file> <width> <height> : creates a wallpaper
- -s : use a "safer" and slower method to get the background color
- $0 -h : displays this help message
-Example: $0 coolimage.png 1920 1080
+Generate wallpapers to a specified size, given a base picture
+
+$0 [-vs] width height [picture [picture [...]]]
+$0 -h
+
+-h : displays this help message
+-s : use a "safer" and slower method to get the background color
+-v : be verbose (set -x)
+
+Example: $0 1920 1080 coolimage.png
+
+The following syntax also works:
+find . -type f -name '*.png' | $0 1080 1920
EOH
exit ${1:-0}
}
@@ -40,18 +49,24 @@ die() {
echo "$1" && exit "${2:-1}"
}
-if [ "$1" = "-h" ]; then
- usage
-fi
+while getopts ":hvs" _opt; do
+ case "$_opt" in
+ h) usage ;;
+ s) _slow=1 ;;
+ v) set -x ;;
+ *) usage 1 >&2 ;;
+ esac
+done
+
+shift $((OPTIND-1))
-if [ "$1" = "-s" ]; then
+if [ -n "$_slow" ]; then
getbg() {
# We get all hexa codes of all pixels in the picture, and pick the most
# frequent one... which should be the background color?
convert "$1" -format %c +dither -depth 5 histogram:info: |
sort -nr | head -1 | grep -Eo '#[A-F0-9]{6}'
}
- shift
else
getbg() {
# We get the color of the top-left pixel.
@@ -59,19 +74,30 @@ else
}
fi
-if [ $# -ne 3 ]; then
+# We require width & height
+# TODO: maybe auto-detect? seems tricky with dual screen
+if [ $# -lt 2 ]; then
usage 1 >&2
fi
+width="$1"
+height="$2"
+shift 2
-[ -r "$1" ] || die "File $1 is not readable!"
-inpfile="$1"
-outfile="$(basename "$inpfile")"
-width="$2"
-height="$3"
-bgcolor="$(getbg "$inpfile")"
+{ if [ -z "$1" ]; then
+ # No arguments, we read stdin
+ cat -
+else
+ for _file in "$@"; do
+ printf "%s\n" "$_file"
+ done
+fi } |
+while IFS= read -r inpfile; do
+ outfile="$(basename "$inpfile")"
+ bgcolor="$(getbg "$inpfile")"
-# We use the `-resize ..x..\>` syntax to only shrink pictures. Enlarging is
-# asking for trouble (artifacting, etc.)
-convert "$inpfile" -gravity center -resize "${width}x${height}>" \
- -background "$bgcolor" -extent "${width}x${height}" \
- "${outfile%.*}-${width}x${height}.${outfile##*.}"
+ # We use the `-resize ..x..\>` syntax to only shrink pictures. Enlarging is
+ # asking for trouble (artifacting, etc.)
+ convert "$inpfile" -gravity center -resize "${width}x${height}>" \
+ -background "$bgcolor" -extent "${width}x${height}" \
+ "${outfile%.*}-${width}x${height}.${outfile##*.}"
+done