#!/bin/sh
#
# Yksinkertainen esimerkkikomentojonotiedosto bash-kuorelle.
#
# Käyttää työkaluohjelmia kurssilogon tekemiseksi. Demonstroi
# muun muass seuraavia asioita:
#
#    - perus-"eräajo"
#    - yksinkertainen bash-skripti (ei muuttujia kummempia rakenteita)
#    - unix-tiedostojärjestelmä, laitehakemisto /dev/
#    - datan putkittaminen prosessilta toiselle    '|'
#    - tiedoston ohjaaminen syötteeksi prosessille '<'
#    - vasteen ohjaaminen tiedostoksi (overwrite)  '>'
#    - muutamia apuohjelmia (isoja ja pieniä; perinteisiä ja erikoisempia)
#    - jonkun satunnaisen päivän tarpeeseen tehty kokoelma one-linereita
#
# Ei tässä ehkä tähän tarkoitukseen mitään järkeä ole, mutta hiton
# hauska oli väsäillä :-).
#
# Grafiikkaa lienee useimmiten kätevintä tehdä hiirellä klikkailemalla
# ikkunoissa, mutta täytyy ymmärtää, että se on mahdollista myös
# muulla tavoin... Entäs, jos tällainen jostain syystä pitäisi tehdä
# tuhannelle eri taustakuvalle joka päivä kello 18:00. Kuka palkataan
# klikkailemaan, vai tehdäänkö sittenkin skripti?!
#
# Joskus halutaan automaattista tietojenkäsittelyä (ATK) ahkeran
# tyypin klikkailun (ATK) sijasta.

# Otettaisko kumminkin yksi argumentti... jo vuonna 2016(?).
# Ja fiksataan loppu skripti sen mukaisesti vuonna 2020(?)
# Ja napataan komentojonotiedosto versionhallintaan kurssimateriaalin osaksi 2025

if [ $# -lt 1 ]
then
  echo "Usage: $0 IMAGE"
  echo "Taustakuvan IMAGE kuvasuhteeksi oletetaan noin 2x1 eli pitkulainen vaakakuva."
  exit 1
else
  BGSRCIMG="$1"
fi

# Gamma-korjauksen parametria voi säädellä tästä (pittäis olla argumentti muiden joukossa):
GAMMAVALUE=3


# ----------- Ensin tehdään logokuva vaiheittain.

# Bitsinnypläyskurssin logoon tarvitaan satunnaisia ykkösiä ja nollia!
#
# Unix-tiedostojärjestelmästä päästään käsiksi "tiedostoon" nimeltä
# /dev/urandom josta voidaan lukea ääretön määrä satunnaisia
# tavuja. Ryhdytään lukemaan laitteelta ja putkitetaan se 
# apuohjelmille. Viimeinen lakkaa ottamasta vastaan, kun se on saanut
# 35 riviä dataa. Se mitä menee läpi, ohjataan tekstitiedostoon:

dd if=/dev/urandom | od -An -t x1 | fold -w 3 | \
    awk '/[0-7]./ {printf "0" } /[89a-f]./ {printf "1"}' | \
    fold -w 128 | head -35 > rndbits.txt

# Sen jälkeen käytellään ImageMagick -ohjelmistopaketin palveluita
# komentoriviltä. Muodostetaan väliaikaisia kuvia ja koostetaan niistä
# lopullinen.

# Ensiksi satunnaiset bitit PNG-kuvaksi:
convert -size 600x360 xc:white -font "Liberation-Mono" \
	-pointsize 12 -fill black -annotate +0+0 "@rndbits.txt" bits.png

# Fontit on kyl aikamoinen murheenkryyni.. mikä ny sitte olis ja pysyis..
# /usr/share/texlive/texmf-dist/fonts/type1/adobe/courier/pcrb8a.pfb
# /usr/share/texlive/texmf-dist/fonts/type1/urw/avantgar/uagd8a.pfb
convert -size 600x200 xc:white -fill black \
   -gravity center -font /usr/share/texlive/texmf-dist/fonts/type1/adobe/utopia/putb8a.pfb \
   -pointsize 125   -draw "text 0,-48 'ITKA2030'" \
   -pointsize 50 -draw "text  0,48 '-Käyttikset ynnä muuta-'" \
   +matte \
   textmask.png

#convert -compose Copy_Opacity \
convert \
    \( bits.png -colorize 55% -swirl 13 \)  \
    \( textmask.png  \) \
    -compose CopyOpacity \
    -composite \
    finalmask.png

convert  \
   \( \
     -size 600x200 \
      plasma:blue-navy \
      \( xc:white finalmask.png -compose Over -composite -negate \) \
      -compose Copy_Opacity -composite \
   \) \
  kurssilogo_eivarjoa.png


# Varjostus olis niinku tosi kiva juttu:

convert \
    kurssilogo_eivarjoa.png \
      \( +clone  -background purple -shadow 20x1.5+4+6 \) +swap \
      -background none  -mosaic \
   \
  kurssilogo.png


# ------------ Sitten yhdistetään edellä tehty logo taustakuvaan.

# Taustakuvan esikäsittely:

convert $BGSRCIMG -gamma $GAMMAVALUE -resize 740 -fill 'rgb(220,220,255)' -colorize 50% tmp.png

# Gradienttivaalennus:

convert -size 400x680 radial-gradient:black-grey -rotate 90 gradientti.png

convert tmp.png \
    gradientti.png \
    -compose overlay \
    -composite taustakuva.jpg

# Yhdistäminen varjostettuun logoon:

convert  -size 1024x302 xc:white \
  taustakuva.jpg  -geometry +370+0 -composite \
  kurssilogo.png  -geometry +27+27 -composite \
  -blur 0.22x0.33 -quality 88 -interlace Plane \
  otsikkorantu.jpg


# ------------- siinäpä se.

# Lopussa voitaisiin poistaa väliaikaiset tiedostot, mutta jätetään ne nyt...
# Oikeasti tehtäisiin väliaikainen hakemisto /tmp/:n alle ylipäätään.
# Siinä omat kommervenkkinsä saada kuntoon. Ehkä jonakin vuonna...
#
# rm textmask.png finalmask.png tmp.png