Hovedsiden Om generatoren Prøv selv Diskusjon Om prosjektet Galleri
Prosjektarbeid i faget Eksperter i team - 2005. Landsbytema: Kunst og teknologi: tør du?
JPG-fil åpnet i Notepad
Graf for PHP-generatoren
Ideen bak generatorene på denne siden er å representere informasjonen som ligger i digitale datafiler som bilder. Fine ord men hva betyr det egentlig? De fleste kjenner til at filene som lager når en tar digitale bilder eller skriver et dokument i en tekstbehandler i bunn og grunn er en streng med 0er og 1er. For å få noe fornuftig ut av disse strengene trengs et sett med regler for hvordan de skal tolkes. Et eksempel er enkle tekstfiler hvor hver bokstav har hver sin streng med åtte biter (0er eller 1er), og så må programmet du viser fila i vite hvilken bokstav som hører til hver streng. Hadde en prøvd å åpne en annen filtype (for eksempel et bilde) med denne regel hadde en fått en tekst, men den hadde nesten garantert brutt alle regler og logikk og rettskriving.

Hva så med bilder? Den vanligste måten lagre bilder på er å dele dem opp i mange små kvadrater som kalles pixler, og gi hvert av disse kvadratene en mengde rød, grønn og blå farge. Hver av disse mengdene med farge er igjen lagret som en streng med biter - en lang streng gir mulighet for flere nivåer med farge og gir derfor bilder med bedre kvalitet, men tar også større plass på det mediet de er lagret på. Hver pixel har også en adresse som er som er to tall som forteller posisjonen i forhold til hjørnet oppe til venstre.

Hva skjer så hvis en farger en linje mellom to punkter med adresser som er gitt av de to første ordene i denne teksten og gir den fargen som er gitt av det tredje orde. Hvem vet; men siden vi har datamaskiner kan vi finne ut.

Generatorene som er implementert på disse sidene bruker i varierende grad strukturen i filtypene. Noen virker bare på digitale bilder, andre på alle typer filer. Forskjellen ligger hvordan informasjonen blir hentet ut fra filene og hvor mye disse reglene likner på de reglene som det er intensjonen at filene egentlig skal brukes med. For bilder kan fargene hentes ut og brukes på nytt, mens dette ikke gir mening når det gjelder andre filtyper. Felles for alle generatorene er at de bruker grunnregler som tilegner et stykke informasjon fra en fil en geometrisk form, en farge eller en adresse til et sted på bildet.

Hvem er da som kontrollerer hvordan produktene blir seende ut? Det er uendelig mange måter å programmere en generator og hver og en av disse gir unike resultater for hver unik datafil. All kontroll ligger med andre ord ikke i datafilen. Men heller ikke programmereren har full kontroll siden det er menneskelig umulig for de fleste mulige generatorer å forutse det nøyaktige resultatet. Vi har altså en situasjon hvor programmereren legger visse premisser, men har aldri oversikt siden floraen av datafiler i verden er enorm og voksende.

JAVAgeneratoren:

JAVAgeneratoren er den mest generelle generatoren siden den virker på alle typer digitale filer. Essensielt består den av to deler - en del som laster inn data og lager en tabell med desimaltall mellom 0 og 1 av disse, og en del som bruker tabellen til å lage et bilde. Den første delen har igjen to utgaver - en som brukes når filen inn er et bilde og en som brukes på alle andre typer filer. Hvis filen inn er et bilde lages tabellen ved å bruke middelverdien til fargeverdiene i fire piksler som danner hjørnene i et rektangel, og flytte dette rektangelet rundt på bildet slik at vi får hentet ut data fra alle delene av bildet. For alle andre filtyper lages tabellen ved å hente ut sekvenser av 24 0er og 1er og lage desimaltall av disse.

Når dette er gjort står vi igjen med en tabell som, avhengig av størrelsen av filen, inneholder omkring 10000 verdier. Basert på denne og en regel kan vi lage utbildet. De reglene som er brukt her funger omtrent som følger: Hent ut to tall fra tabellen og multipliser disse med henholdsvis høyden og bredden av utbildet. Ved å gjøre dette har vi laget oss koordinater for hvor et geometrisk objekt skal ha et av hjørnene. Avhengig av reglen vi bruker kan vi så finne de andre hjørnene i forhold til det første. Som eksempel skal vi bruke rektangelregelen. Hvis det er gitt at rektanglenes kanter skal være horisontale og vertikale er alle rektanglene unikt bestemt av to punkter - hjørnene som står diametralt fra hverandre. Siden vi har gitt det ene hjørnet kan vi finne det andre ved å addere et tall til hvert av koordinatene til det første hjørnet. Tallene vi adderer med er to nye tall fra tabellen, multiplisert med størrelsesmålet (som er en av knottene du kan skru på), og når dette er gjort er det bare å be datamaskinen fargelegge rektangelet definert av de to punktene. De andre reglene fungerer nesten på samme måten.

Når det gjelder fargevalgene kan dette gjøres på to måter: hvis innfilen er et bilde kan en hente en farge fra bildet på et punkt med koordinater som lages ved å hente to tall fra tabellen. Hvis vi bruker en annen fil eller du har skrudd av farge-fra-bildet opsjonen kan en kan lage en farge ved å hente tre verdier fra tabellen, multiplisere disse med målene for henholdsvis rød, grønn og blå farge, og la fargen i være den som fremkommer av disse tallene. Hele denne prosessen gjøres så om igjen så lenge en har flere tall igjen i tabellen.

PHPgeneratoren:

PHPgeneratoren fungerer kun med JPEG bilder som innfil. Grunnen til å bruke PHP er at dette språket åpner for å lage skikkelige bildefiler som kan lastes ned, noe som av sikkerhetsårsaker er svært vanskelig i JAVA. Generatoren følger en prosedyre som er omtrent som følger:

For annenhver piksel i bildet hentes fargeverdien ut. Gjør et gitt antall bitshift (en vanlig operasjon i programmering, men litt involvert å forklare her. Essensielt lager den et nytt tall fra det gamle tallet), del det bitshiftede tallet på 1000 og ta vare på resten (som alltid er et tall mellom 0 og 1). Ved hjelp av denne resten kan vi så lage koordinater for et av hjørnene på samme måte som i JAVAgeneratoren. Størrelsen på det geometriske objektet bestemmes av en matematisk funksjon som kalles et trigonometrisk polynom. Ved å putte posisjonen til det geometriske objektet inn i funksjonen gir den tilbake et mål på størrelsen objektet skal ha. Det er tre knotter å skru på for funksjonen - dens amplitude (hvor sterkt den virker), dens forflytning i rommet (hvor på funksjonen vi er) og dens båndbredde (hvor fort den går opp og ned). Når funksjonen er evaluert finnes de andre hjørnene i det geometriske objektet som i JAVAgeneratoren med den modifikasjon at vi her også må multiplisere med svaret fra funksjonen.

Output fra generator av samme fil
Output fra generator av samme fil
Output fra generator av samme fil
Sist oppdatert 7.03.2005 | Webmaster