瀏覽代碼

makemywall: first introduction of the wallpaper generation script

This script was inspired by initial work by jstpcs
Additional features:

* breaks compatibility to have an easier interface and easier code
* can either read the entire picture to get the background color (slow)
* or pick the color of the top-left pixel (fast, default)
* doesn't scale pictures up to avoid "fuzzy" pictures
* now has a proper license (BSD-2)
Moviuro 8 年之前
父節點
當前提交
8fb0ec040c
共有 1 個檔案被更改,包括 77 行新增0 行删除
  1. 77
    0
      makemywall

+ 77
- 0
makemywall 查看文件

@@ -0,0 +1,77 @@
1
+#!/bin/sh
2
+
3
+# Copyright 2017 jstpcs <jstpcs at protonmail dot com>
4
+# Copyright 2017 moviuro <moviuro at gmail dot com>
5
+
6
+# Redistribution and use in source and binary forms, with or without
7
+# modification, are permitted provided that the following conditions are met:
8
+#
9
+# 1. Redistributions of source code must retain the above copyright notice, this
10
+# list of conditions and the following disclaimer.
11
+#
12
+# 2. Redistributions in binary form must reproduce the above copyright notice,
13
+# this list of conditions and the following disclaimer in the documentation
14
+# and/or other materials provided with the distribution.
15
+#
16
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+set -e
28
+
29
+usage() { 
30
+  cat << EOH
31
+Usage:   $0 [-s] <source file> <width> <height> : creates a wallpaper
32
+            -s : use a "safer" and slower method to get the background color
33
+         $0 -h : displays this help message
34
+Example: $0 coolimage.png 1920 1080
35
+EOH
36
+  exit ${1:-0}
37
+}
38
+
39
+die() {
40
+  echo "$1" && exit "${2:-1}"
41
+}
42
+
43
+if [ "$1" = "-h" ]; then
44
+  usage
45
+fi
46
+
47
+if [ "$1" = "-s" ]; then
48
+  getbg() {
49
+    # We get all hexa codes of all pixels in the picture, and pick the most
50
+    # frequent one... which should be the background color?
51
+    convert "$1" -format %c +dither -depth 5  histogram:info: |
52
+      sort -nr | head -1 | grep -Eo '#[A-F0-9]{6}'
53
+  }
54
+  shift
55
+else
56
+  getbg() {
57
+    # We get the color of the top-left pixel.
58
+    convert "$1" -crop 1x1+0+0 -depth 8 txt: | grep -Eo '#[A-F0-9]{6}'
59
+  }
60
+fi
61
+
62
+if [  $# -ne 3 ]; then 
63
+  usage 1 >&2
64
+fi
65
+
66
+[ -r "$1" ] || die "File $1 is not readable!"
67
+inpfile="$1"
68
+outfile="$(basename "$inpfile")"
69
+width="$2"
70
+height="$3"
71
+bgcolor="$(getbg "$inpfile")"
72
+
73
+# We use the `-resize ..x..\>` syntax to only shrink pictures. Enlarging is
74
+# asking for trouble (artifacting, etc.)
75
+convert "$inpfile" -gravity center -resize "${width}x${height}>" \
76
+  -background "$bgcolor" -extent "${width}x${height}" \
77
+  "${outfile%.*}-${width}x${height}.${outfile##*.}"