Kirjoittaja: Antti Laaksonen (2003).
Tässä oppaassa kerrotaan, kuinka PHP:llä on mahdollista luoda lennossa kuvia GD-kirjaston avulla. Useimmilta palvelimilta tämä kirjasto nykyisin löytyy, ja jos haluat testata skriptejä omalla koneellasi, voit asentaa kirjaston, ellet niin vielä ole tehnyt.
GD-kirjastosta on olemassa lukuisia versioita, joissa uudemmissa on aina enemmän funktioita. Tästä syystä kaikki tässä oppaassa esitetyt funktiot eivät välttämättä toimi, jos käyttämälläsi palvelimella on vanhempi versio kirjastosta. Mukaan on kuitenkin pyritty ottamaan lähinnä tavallisimpia funktioita.
Aloitetaan pienellä esimerkillä, joka luo yksinkertaisen kuvan.
<?php //lähetetään tunniste selaimelle header("Content-type: image/png"); //luodaan 200x100-pikselin kokoinen kuva $kuva=imagecreate(200,100); //määritetään taustaväri ja kaksi muuta väriä $tausta=imagecolorallocate($kuva, 255, 255, 255); $musta=imagecolorallocate($kuva,0,0,0); $sininen=imagecolorallocate($kuva,0,0,255); //piirretään kehykset, teksti ja viiva imagerectangle($kuva,0,0,199,99,$musta); imagestring($kuva,2,10,10,"GD-kirjasto toimii!",$sininen); imageline($kuva,10,24,130,80,$sininen); //lähetetään kuva PNG-muodossa imagepng($kuva); //poistetaan kuva muistista imagedestroy($kuva); ?>
Tämä skripti piirtää seuraavanlaisen kuvan:
Ensimmäisellä rivillä header
-komento lähettää selaimelle tiedon siitä, että tulossa on PNG-tyyppinen kuva. GD-kirjasto tukee useita kuvaformaatteja, josta käytetyimmät ovat PNG ja JPEG. Vastaavasti JPEG:n tapauksessa header
-merkkijono olisi "Content-type: image/jpeg".
Kuva luodaan imagecreate
-funktiolla. Parametrit ovat kuvan leveys ja korkeus pikseleinä. Funktio palauttaa kuvan tunnisteen, tässä tapauksessa muuttujaan $kuva
, jota käytetään seuraavien piirtofunktioiden kanssa. Kuvan pohjaksi voi ottaa myös toisen kuvan. Tämä tapahtuu formaatista riippuen imagecreatefrompng
- ja imagecreatefromjpeg
-funktioilla, jolloin parametriksi annetaan kuvatiedoston nimi.
Tämän jälkeen määritellään kolme kuvassa käytettävää väriä imagecolorallocate
-funktiolla. Funktio palauttaa arvon, jota voi myöhemmin käyttää piirtofunktioissa. Ensimmäinen määriteltävä väri tulee kuvan taustaväriksi. Värit määritetään RGB-arvona (punaisen, vihreän ja sinisen määrä välillä 0-255).
Seuraavilla riveillä imagerectangle
, imagestring
ja imageline
piirtävät itse kuvan – näistä funktioista pian lisää.
Funktio imagepng
lähettää lopullisen kuvan selaimelle PNG-muodossa. Vastaava funktio JPEG-muodossa olisi imagejpeg
. Kuvan voi myös tallentaa tiedostoon, jolloin tiedoston nimi on funktion toinen parametri.
Loppuun on hyvä laittaa imagedestroy
-funktio, joka poistaa kuvan varaaman tilan muistista.
Tässä on joitakin GD-kirjaston kymmenistä piirtofunktioista. Kuvan tunniste tarkoittaa imagecreate
-funktion palauttamaa arvoa. X on vaakasuuntainen etäisyys vasemmasta laidasta ja y on pystysuuntainen etäisyys ylälaidasta. Viivan väri on imagecolorallocate
-funktion palauttama arvo.
imagecolorat
palauttaa pisteen värin kuvasta. Parametrit ovat kuvan tunniste sekä pisteen x ja y.imagecopy
kopioi osan kuvasta toiseen kuvaan. Parametrit ovat kohde- ja lähdekuvan tunniste, kohdekuvan x ja y, lähdekuvan x ja y sekä kopioitavan osan leveys ja korkeus. imagecopyresized
ja imagecopyresampled
osaavat lisäksi pienentää tai suurentaa kuvan kokoa, niissä ilmoitetaan sekä lähdekuvan leveys ja korkeus että kohdekuvan leveys ja korkeus.imageellipse
piirtää ympyrän tai ellipsin. Parametrit ovat kuvan tunniste, keskipisteen x ja y, ympyrän leveys ja korkeus sekä ympyrän väri.imageline
piirtää viivan. Parametrit ovat kuvan tunniste, viivan aloituskohdan x ja y, viivan lopetuskohdan x ja y sekä viivan väri.imagepolygon
piirtää monikulmion. Parametrit ovat kuvan tunniste, taulukko pisteistä, pisteiden määrä ja väri. (*)imagerectangle
piirtää nelikulmion. Parametrit ovat kuvan tunniste, nelikulmion vasemman ylänurkan x ja y, oikean alanurkan x ja y sekä nelikulmion väri. (*)imagerotate
pyörittää kuvaa. Parametrit ovat kuvan tunniste, pyöritettävä kulma asteina ja taustaväri.imagesetpixel
piirtää yhden pisteen. Parametrit ovat kuvan tunniste, pisteen x ja y sekä pisteen väri. (*)imagestring
kirjoittaa tekstiä. Parametrit ovat kuvan tunniste, tekstin fonttityyppi (1-5), tekstin aloituskohdan x ja y sekä teksti ja tekstin väri.imagesx
ja imagesy
palauttavat kuvan leveyden ja korkeuden. Funktioille annetaan parametriksi kuvan tunniste.Funktiot, joiden perässä on (*), voidaan piirtää myös täytettynä, jolloin image-sanan jälkeen tulee filled (imagerectangle
-> imagefilledrectangle
).
Kun kuvien luomisen perusteet alkavat olla hanskassa, kannattaa siirtyä PHP:n manuaalin pariin. Sieltä löytyy mm. kaikkien piirtofunktioiden kuvaukset sekä muuta lisätietoa GD-kirjaston käytöstä. Tämä opas päättyy tähän, kysymyksiä ja palautetta voi lähettää sähköpostilla.
Mukava pikku opas jolla pääsee kätevästi alkuun.
Joo, kiva.
hyvä opas ehdottomasti kuten muutkin php oppaat
Tämän ja asennusoppaan voisi yhdistää yhdeksi sekä tähän voisi lisätä imagemagickin samaan.
Miks GDLibin käyttö ja ja asennus pitäis yhdistää? saahan ne toki yhdistää, mut miks?
Hmm, näyttää mielenkiintoiselta. Täytyy kastoa mitä tällä saisi tehtyä.
Miten tuo tulee liittää html koodin joukkoon? nimittäin jos yritän samaan tiedostoon sijottaa muutaki ku tota kuva koodia niin tulee ilmotus "Kuvaa ei voi näyttää koska se sisältää virheitä"
sane, tätä ei kenties kannata/pysty liittämään suoraan html/php koodiin. Tee kuvalle oma tiedosto (esim. kuva.php) ja lataa se html-dokkariin normaalisti ( <img src="kuva.php"> ). Pitäisi toimia.
travenin kirjoitti:
sane, tätä ei kenties kannata/pysty liittämään suoraan html/php koodiin. Tee kuvalle oma tiedosto (esim. kuva.php) ja lataa se html-dokkariin normaalisti ( <img src="kuva.php"> ). Pitäisi toimia.
Ja toimiikin.
Mites FreeType 2 toimii?
[ymmärsinks oikein se kuuluu jotenki GDkuvii?]
ihanaaaa. Nyt saan ratkaistua minua monta vuotta piinanneen ongelman.
Vielä sellainen myös, että pystyykö taustaa tekemään läpinäkyväksi??
Miksei onnistu laittaa tekstin kokoa 20 isommaksi?
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.