| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/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##*.}"
|