Kirjautuminen

Haku

Tehtävät

Opasarkisto: PHP: GD-kirjaston käyttö

Kirjoittaja: Antti Laaksonen. Vuosi: 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.

Esimerkkiskripti

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:

Esimerkin toiminta

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.

Muutamia piirtofunktioita

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.

Funktiot, joiden perässä on (*), voidaan piirtää myös täytettynä, jolloin image-sanan jälkeen tulee filled (imagerectangle -> imagefilledrectangle).

Loppusanat

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.

Kommentit

thefox [28.02.2003 16:27:21]

Lainaa #

Mukava pikku opas jolla pääsee kätevästi alkuun.

Tumpi [11.03.2003 16:32:28]

Lainaa #

Joo, kiva.

Olli Vanhoja [25.06.2003 00:46:46]

Lainaa #

hyvä opas ehdottomasti kuten muutkin php oppaat

tsuriga [22.06.2004 15:51:36]

Lainaa #

Tämän ja asennusoppaan voisi yhdistää yhdeksi sekä tähän voisi lisätä imagemagickin samaan.

KuinKala [23.02.2005 10:22:41]

Lainaa #

Miks GDLibin käyttö ja ja asennus pitäis yhdistää? saahan ne toki yhdistää, mut miks?

Grimmi [11.08.2005 08:49:19]

Lainaa #

Hmm, näyttää mielenkiintoiselta. Täytyy kastoa mitä tällä saisi tehtyä.

sane [17.12.2005 17:45:55]

Lainaa #

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ä"

u-2623 [31.01.2006 14:09:34]

Lainaa #

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.

makeuu [19.06.2007 09:00:14]

Lainaa #

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.

apsu [05.07.2008 07:44:59]

Lainaa #

Mites FreeType 2 toimii?

[ymmärsinks oikein se kuuluu jotenki GDkuvii?]

Väpä [28.02.2009 23:53:12]

Lainaa #

ihanaaaa. Nyt saan ratkaistua minua monta vuotta piinanneen ongelman.

Vielä sellainen myös, että pystyykö taustaa tekemään läpinäkyväksi??

ankzilla [14.03.2009 19:52:06]

Lainaa #

Miksei onnistu laittaa tekstin kokoa 20 isommaksi?

Kirjoita kommentti

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.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta