aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmakemywall77
1 files changed, 77 insertions, 0 deletions
diff --git a/makemywall b/makemywall
new file mode 100755
index 0000000..71c06e4
--- /dev/null
+++ b/makemywall
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Copyright 2017 jstpcs <jstpcs at protonmail dot com>
+# Copyright 2017 moviuro <moviuro at gmail dot com>
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+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
+EOH
+ exit ${1:-0}
+}
+
+die() {
+ echo "$1" && exit "${2:-1}"
+}
+
+if [ "$1" = "-h" ]; then
+ usage
+fi
+
+if [ "$1" = "-s" ]; 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.
+ convert "$1" -crop 1x1+0+0 -depth 8 txt: | grep -Eo '#[A-F0-9]{6}'
+ }
+fi
+
+if [ $# -ne 3 ]; then
+ usage 1 >&2
+fi
+
+[ -r "$1" ] || die "File $1 is not readable!"
+inpfile="$1"
+outfile="$(basename "$inpfile")"
+width="$2"
+height="$3"
+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##*.}"