#!/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