diff options
| -rwxr-xr-x | util/bin/make-realwallpaper | 169 | 
1 files changed, 126 insertions, 43 deletions
| diff --git a/util/bin/make-realwallpaper b/util/bin/make-realwallpaper index d8b702f6..2406372e 100755 --- a/util/bin/make-realwallpaper +++ b/util/bin/make-realwallpaper @@ -5,50 +5,133 @@ set -euf  #run in new directory(will be polluted with images  #just run ./make-realwallpaper -curl -sSz Nightmap_bare.jpg http://awka.sourceforge.net/Night_le_huge.jpg -o Nightmap_bare.jpg & -curl -sSz Daymap_bare.png http://www.nnvl.noaa.gov/images/globaldata/SnowIceCover_Daily.png -o Daymap_bare.png & -curl -sSz Clouds.jpg http://user.chol.com/~winxplanet/cloud_data/clouds_2048.jpg -o Clouds.jpg & -wait - -if ! file -ib Nightmap_bare.jpg|grep -q ^image/; then -    rm Nightmap_bare.jpg -    exit 1 -fi -if ! file -ib Daymap_bare.png|grep -q ^image/; then -    rm Daymap_bare.png -    exit 1 -fi -if ! file -ib Clouds.jpg|grep -q ^image/; then -    rm Clouds.jpg -    exit 1 -fi - -#resize the Daymap -convert Daymap_bare.png -scale 4000x2000 Daymap.png -#convert Daymap to a snow only alphamap -convert Daymap.png  -threshold '95%' Daymap_snowmask.png - -#create a full snowmap in the nightcolor -convert Daymap.png -fill '#0a3b5c' -colorize '100%' Nightmap_fullsnow.png -#get nightlights out of Nightmap_bare -convert Nightmap_bare.jpg -threshold '25%' -transparent '#000000' Nightmap_lightmask.png -#composite Snowmask and Fullsnow to Nightmap_snowlayer -convert Nightmap_fullsnow.png Daymap_snowmask.png -alpha off -compose copy_opacity -composite Nightmap_snowlayer.png -#cut out the lights in Nightmap_lightmask and put them in Nightmap_lightlayer -convert Nightmap_bare.jpg Nightmap_lightmask.png -alpha off -compose copy_opacity -composite Nightmap_lightlayer.png - -#Composite the Nightmap_snowlayer and the Nightmap_lightlayer with the Nightmap -composite Nightmap_lightlayer.png Nightmap_snowlayer.png Nightmap_lightsnowlayer.png -composite Nightmap_lightsnowlayer.png Nightmap_bare.jpg Nightmap.png - -#write the xplanet-configfile -cat > xplanet-config << EOF +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 cloud-layer.jpg \ +    http://user.chol.com/~winxplanet/cloud_data/clouds_2048.jpg & +  wait + +  check_type nightmap.jpg image +  check_type daymap.png image +  check_type cloud-layer.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 + +  # 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 <<EOF  [earth]  "Earth" -map=Daymap.png -night_map=Nightmap.png -cloud_map=Clouds.jpg +map=daymap-final.png +night_map=nightmap-final.png +cloud_map=cloud-layer.jpg  EOF +  needs_rebuild xplanet-output.png \ +    daymap-final.png \ +    nightmap-final.png \ +    cloud-layer.jpg \ +    && xplanet --num_times 1 --geometry 1466x1200 \ +        --output xplanet-output.png --projection merc -config xplanet.config + +  # trim xplanet output +  needs_rebuild realwallpaper.png \ +    xplanet-output.png \ +    && convert xplanet-output.png -crop 1366x768+100+160 realwallpaper.png +} + +# usage: getimg FILENAME URL +fetch() { +  echo "fetch $1" +  curl -sS -z "$1" -o "$1" "$2" +} + +# usage: check_type FILENAME TYPE +check_type() { +  if ! file -ib "$1" | grep -q "^$2/"; then +    echo "$1 is not of type $2" >&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 +  (exit $result) +} + -xplanet --num_times 1 --geometry 1466x1200 --output xplanet-output.jpg --projection merc -config xplanet-config -convert xplanet-output.jpg -crop 1366x768+100+160 realwallpaper.png +main "$@" | 
