#!/bin/sh set -euf ###### USAGE ##### #run in new directory(will be polluted with images #just run ./make-realwallpaper main() { # fetch source images in parallel fetch nightmap.jpg \ http://awka.sourceforge.net/Night_le_huge.jpg & fetch daymap.png \ http://www.nnvl.noaa.gov/images/globaldata/SnowIceCover_Daily.png & fetch clouds.jpg \ http://user.chol.com/~winxplanet/cloud_data/clouds_2048.jpg & fetch krebs.sat.tle \ http://www.celestrak.com/NORAD/elements/stations.txt wait check_type nightmap.jpg image check_type daymap.png image check_type clouds.jpg image # downscale daymap to match nightmap needs_rebuild daymap-final.png \ daymap.png \ && convert daymap.png -scale $(image_size nightmap.jpg) daymap-final.png needs_rebuild clouds-final.png \ clouds.jpg \ && convert clouds.jpg -scale $(image_size nightmap.jpg) clouds-final.png # create nightmap-fullsnow needs_rebuild nightmap-fullsnow.png \ && convert \ -size $(image_size nightmap.jpg) \ 'xc:#0a3b5c' nightmap-fullsnow.png # extract daymap-snowmask from daymap-fonal needs_rebuild daymap-snowmask.png \ daymap-final.png \ && convert daymap-final.png -threshold 95% daymap-snowmask.png # extract nightmap-lightmask from nightmap needs_rebuild nightmap-lightmask.png \ nightmap.jpg \ && convert nightmap.jpg -threshold 25% nightmap-lightmask.png # create layers make_layer nightmap-snowlayer.png nightmap-fullsnow.png daymap-snowmask.png make_layer nightmap-lightlayer.png nightmap.jpg nightmap-lightmask.png # apply layers flatten nightmap-lightsnowlayer.png \ nightmap-lightlayer.png \ nightmap-snowlayer.png flatten nightmap-final.png \ nightmap-lightsnowlayer.png \ nightmap.jpg # create xplanet output needs_rebuild xplanet.config \ && cat >xplanet.config <xplanet-sat.config <krebs.sat <krebs.mar <&2 rm "$1" return 1 fi } # usage: image_size FILENAME image_size() { identify "$1" | awk '{print$3}' } # usage: make_mask DST SRC MASK make_layer() { if needs_rebuild "$@"; then echo "make $1 (apply mask)" >&2 convert "$2" "$3" -alpha off -compose copy_opacity -composite "$1" fi } # usage: flatten DST HILAYER LOLAYER flatten() { if needs_rebuild "$@"; then echo "make $1 (flatten)" >&2 composite "$2" "$3" "$1" fi } # usage: needs_rebuild DST SRC... needs_rebuild() { a="$1" shift if ! test -e "$a"; then #echo " $a does not exist" >&2 result=0 else result=1 for b; do if test "$b" -nt "$a"; then #echo " $b is newer than $a" >&2 result=0 fi done fi #case $result in # 0) echo "$a needs rebuild" >&2;; #esac return $result } main "$@"