#!/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-old-raw.jpg \ # http://awka.sourceforge.net/Night_le_huge.jpg & fetch nightmap-raw.jpg \ http://www.zeitnews.org/sites/default/files/users/20/article_slideshow_images/nasa-noaa-satellite-reveals-new-views-earth-night-1354814354_0.jpg & fetch daymap-raw.png \ http://www.nnvl.noaa.gov/images/globaldata/SnowIceCover_Daily.png & fetch clouds-raw.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-old-raw.jpg image check_type nightmap-raw.jpg image check_type daymap-raw.png image check_type clouds-raw.jpg image in_size=2048x1024 xplanet_out_size=1466x1200 out_geometry=1366x768+100+160 nightsnow_color='#0c1a49' # nightmap #nightsnow_color='#0a3b5c' # nightmap-old # normalize *-raw.* to *.png #nightmap-old-raw.jpg for raw in \ nightmap-raw.jpg \ daymap-raw.png \ clouds-raw.jpg \ ; do normal=${raw%-raw.*}.png needs_rebuild $normal $raw || continue echo "make $normal; normalize $raw" >&2 convert $raw -scale $in_size $normal done # create nightmap-fullsnow needs_rebuild nightmap-fullsnow.png \ && convert -size $in_size xc:$nightsnow_color nightmap-fullsnow.png # extract daymap-snowmask from daymap-final needs_rebuild daymap-snowmask.png \ daymap.png \ && convert daymap.png -threshold 95% daymap-snowmask.png # extract nightmap-lightmask from nightmap needs_rebuild nightmap-lightmask.png \ nightmap.png \ && convert nightmap.png -threshold 25% nightmap-lightmask.png # create layers make_layer nightmap-snowlayer.png nightmap-fullsnow.png daymap-snowmask.png make_layer nightmap-lightlayer.png nightmap.png nightmap-lightmask.png # apply layers flatten nightmap-lightsnowlayer.png \ nightmap-lightlayer.png \ nightmap-snowlayer.png flatten nightmap-final.png \ nightmap-lightsnowlayer.png \ nightmap.png # nightmap-old.png # make all unmodified files as final for normal in \ daymap.png \ clouds.png \ ; do final=${normal%.png}-final.png needs_rebuild $final && ln $normal $final done map=daymap-final.png night_map=nightmap-final.png cloud_map=clouds-final.png satellite_file=krebs.sat # create xplanet output 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 "$@"