Izrada grafa pomoću GD knjižnice. Crtanje grafova u PHP-u Što smo promijenili

Da biste identificirali upotrebu grafičkih alata u web scenarijima, razmotrite sljedeći raspon mogućih slučajeva upotrebe grafike:

  • Statičke slike, stvorene samostalno ili posuđene od negdje, mogu se ugraditi u HTML stranicu.
  • Mogu se koristiti programski generirane slike (HTML + CSS).
  • Možete koristiti gd biblioteku za stvaranje statične grafike unaprijed za sve moguće situacije koje se pojave tijekom izvođenja skripte, spremiti ih u datoteke i prikazati ih uvjetno.

Nećemo razmatrati opciju implementacije grafike pomoću statičnih slika zbog njene jednostavnosti, pa ćemo prvo razmotriti jednostavnu opciju (HTML + CSS grafika), a zatim ćemo razmotriti korištenje gd biblioteke u PHP-u.

Grafika HTML + CSS

Posjetiteljima web stranica poznati su horizontalni stupčasti grafikoni s obojenim stranicama, koji se posebno često koriste za ilustraciju rezultata anketa. Na prvi pogled se čini kao da se za izradu ovakvih dijagrama koriste nekakvi grafički alati, no u stvarnosti je dovoljno koristiti nekoliko jednostavnih skripti:

Rad s grafikom u PHP-u, HTML-u, CSS-u /* CSS stilovi koji tvore dizajn */ body div ( height: 1em; display: inline-block; vertical-align: middle ) span ( display: inline-block; width: 120px ) .naranča ( pozadina: narančasta ) .jabuka ( pozadina: #33CC66 ) .banana ( pozadina: žuta ) .rajčica ( pozadina: crvena ) .krastavac ( pozadina: zelena ) .krumpir ( pozadina: siva ) Narudžbenica Voće Naranče Jabuke Banane Povrće Rajčice Krastavci Krumpir

Ovaj primjer ne demonstrira nikakve nove značajke PHP-a, već jednostavno pokazuje jednostavan način stvaranja grafike pomoću HTML-a i CSS-a (u ovom slučaju trakasti grafikoni):

gd knjižnica

Grafički alati opisani u prethodnom odjeljku praktički iscrpljuju mogućnosti standardnog HTML koda (iako je vrijedno napomenuti da nismo pokrili prilično moćan alat za izradu grafike HTML5 Canvas). Sada prijeđimo na opisivanje metoda za stvaranje stvarno proizvoljne grafike pomoću gd biblioteke.

Opći opis gd knjižnice

Općenito govoreći, gd toolkit je biblioteka C koda za stvaranje i manipuliranje slikama. Ovu su biblioteku izvorno razvili i javnosti učinili dostupnima talentirani i velikodušni zaposlenici Boutell.com.

Sama gd biblioteka nije program za grafiku ili crtanje, niti predstavlja samostalnu aplikaciju ili grafičko korisničko sučelje. Umjesto toga, biblioteka gd pruža funkcije koje može pozvati bilo koji program za izvođenje željene manipulacije slikom. To znači da se biblioteka gd može povezati s bilo kojim C programom u kojem je potrebno koristiti kod te biblioteke. Upravo je to problem koji su programeri PHP sustava riješili.

Zapravo, skup funkcija sučelja napisan je za ovu svrhu koje olakšavaju pozivanje gd procedura iz PHP skripte. Ali sama biblioteka gd ne sadrži nikakav kod specifičan za PHP, a razvijena su sučelja koja omogućuju pristup biblioteci iz nekoliko drugih programskih jezika i programskih okruženja, uključujući Perl, Pascal, Haskell i REXX.

Biblioteka gd omogućuje vam pozivanje funkcija za stvaranje izvornih slika (u početku prazne, nalik praznom listu papira), crtanje i crtanje unutar tih izvornih slika na razne načine i na kraju konvertiranje slike iz internog formata slike gd-a u standardni formatu slike, a zatim je poslati na konačno odredište (ispisati u prozor preglednika ili spremiti u datoteku ili bazu podataka). A budući da se sve te operacije izvode pod kontrolom programa, a ne ručno, stvorene slike mogu postati koliko god želite složene i ovise o svim situacijama tijekom izvođenja programa o kojima ih je poželjno učiniti ovisnima.

Formati slika

Knjižnica gd u osnovi vam omogućuje uvoz i izvoz slika korištenjem širokog spektra formata. Najpopularniji formati slika su GIF, JPEG i PNG, iako korišteni primjeri prvenstveno koriste potonji.

Formati GIF i PNG namijenjeni su opisivanju mreže obojenih elemenata koji odgovaraju pikselima, uz neke dodatke. Prvi dodatak je da ćelije mogu sadržavati stvarne brojeve boja ili indekse u tablici brojeva boja. (Prva opcija vam omogućuje da stvorite izražajnije slike, jer vam omogućuje da pružite bilo koji broj različitih boja, a posljednja opcija vam pomaže da stvorite kompaktnije slike.)

Drugi dodatak je sljedeći. Naravno, konceptualni prikaz GIF i PNG formata je prilično jednostavan, ali u praksi se čitanje, pisanje i prijenos slika u ovim formatima uvijek vrši u komprimiranom obliku. Kompresija je neophodna jer pohranjivanje podataka predstavljenih kao mreža ćelija zahtijeva veliku količinu memorije. Jednostavna slika veličine 500x400 piksela sadrži 200 000 piksela, a ako svaki piksel zahtijeva tri bajta, potrebna količina memorije već prelazi pola megabajta.

Tema kompresije je široka i složena, ali većina algoritama kompresije temelji se na smanjenju redundantnosti slike kako bi se smanjila njezina veličina. (Na primjer, bit će potrebno manje memorijskog prostora za navođenje da je svaki piksel na slici zelen nego za navođenje zelene vrijednosti za svaki piksel pojedinačno.) Nažalost, algoritmi kompresije ne oslanjaju se na korištenje ovih svojstava jer moraju odlučiti da složenih problema da su metode za rješavanje tih problema, implementirane u algoritam kompresije koji se koristi za generiranje slika u GIF formatu, čak patentirane.

Instaliranje knjižnice

Iskreno govoreći, zadatak instaliranja gd biblioteke i njezinog uspješnog rada u kombinaciji s PHP sustavom prilično je složen. Ovo nije zbog bilo kakvih nedostataka u PHP ili gd softveru, već u potpunosti zbog problema s konfiguracijom; posebno morate razumjeti gdje bi gd biblioteke trebale biti i gdje zapravo jesu, te osigurati da su koraci kompilacije i povezivanja svih izvršnih datoteka ispravno dovršeni. Stoga je najbolja moguća situacija da korisnik otkrije da je gd biblioteka već instalirana i da je gd podrška već omogućena u PHP sustavu (bilo zahvaljujući tvrtki za web hosting ili zato što je uključena u instalirani PHP sustav).

Stoga instalacija gd biblioteke mora započeti od nultog koraka - provjerom je li ta biblioteka već instalirana. Prvo unesite sljedeći kod u svoju datoteku skripte i pogledajte rezultate pokretanja u vašem pregledniku, bez obzira na to pokreće li vaše skripte vaša tvrtka za web hosting ili ih u potpunosti pokreće vaša vlastita instalacija:

Nakon prikaza ove stranice na ekranu, jednostavno potražite tekstualni niz "gd" u prozoru preglednika. Ovo bi trebalo otkriti pododjeljak koji opisuje do koje mjere vaša PHP instalacija dopušta podršku za gd biblioteku. Ako namjeravate pripremiti samo određene vrste slika (na primjer, PNG), a rezultati funkcije phpinfo() pokazuju da je omogućena podrška za tu vrstu slika, možete odmah početi. A ako informacije o verziji gd uključuju riječ "u paketu", tada se koristi biblioteka gd koja dolazi s PHP-om.

Ako pokušaj pronalaženja spomena gd knjižnice završi neuspjehom, a sami instalirate PHP, tada možete instalirati i konfigurirati konfiguraciju gd knjižnice. (S druge strane, ako vašom PHP instalacijom upravlja vaša tvrtka koja pruža usluge hostinga, vaše su jedine mogućnosti zatražiti od te tvrtke da pruži podršku za gd biblioteku ili upotrijebiti drugu tvrtku za web hosting.)

Korištenje gd biblioteke koja dolazi s PHP-om uklanja mnoge gnjavaže povezane s instaliranjem gd-a, ali ne sve. Činjenica je da korištenje same verzije koja je uključena u distribucijski komplet omogućuje dobivanje gd biblioteke, ali ne nužno svih biblioteka potrebnih za rad gd-a. Sama biblioteka gd ovisi o nekoliko drugih biblioteka: libpng (za rad s PNG slikama), zlib (za kompresiju) i jpeg-6b ili noviji (za rad s JPEG slikama ako je potrebno). Ove su biblioteke već prisutne u mnogim instalacijama Linuxa, u kojem slučaju može biti dovoljno uključiti opciju required with (kao što je --with-zlib) u opcije bez navođenja instalacijskog direktorija. Ako sami konfigurirate PHP, možete jednostavno dodati opciju --with-gd kako biste osigurali da je uključena verzija gd-a uključena u izvršnu datoteku. A ako želite pokazati na drugu verziju, umjesto toga upotrijebite opciju --with-gd=path.

Ako ustanovite da jedna ili više potrebnih biblioteka nedostaje, to znači da će se te biblioteke morati zasebno izgraditi. Za informacije o tome gdje pronaći trenutne verzije, možete započeti pregledom dokumentacije koja se nalazi na www.libgd.org.

Osnovna načela rada s gd knjižnicom

Kada se slika stvara ili njome manipulira korištenjem alata gd, slika se predstavlja u posebnom gd formatu koji ne odgovara niti jednoj uobičajenoj vrsti slike. Teoretski je moguće izvesti slike u ovom gd formatu, ali takva se operacija rijetko koristi jer rezultirajuća slika nije komprimirana i ne može se prikazati u pregledniku ili jednostavnom grafičkom programu.

Slika obrađena gd toolkitom karakterizirana je informacijama o širini, visini i boji svih piksela, čiji je broj jednak umnošku širine i visine. Tipično, program započinje svoju interakciju s gd bibliotekom stvaranjem nove prazne slike (na kojoj se crta i crta) ili uvozom slike iz datoteke. Obično se izvode sljedeći koraci: prvo, raspodjela boja na slici, drugo, crtanje i slikanje ili manipuliranje slikom pomoću nekih drugih operacija, treće, pretvaranje slike u općeprihvaćen format (na primjer, PNG ili JPEG ) i prenijeti ga na odredište.

Prikaz boja

Postoje dva načina za predstavljanje boja u gd slikama: prikaz temeljen na paleti, koji je ograničen na 256 boja, i prikaz u pravim bojama, koji vam omogućuje da odredite proizvoljan broj različitih brojeva RBG boja. U gd 1.x, jedina opcija bila je upotreba boja temeljenih na paletama, ali u gd 2.x i verziji ove biblioteke koja je uključena u PHP, moguće je stvoriti slike temeljene na paletama i slike u realističnim bojama. Jedna stvar koju treba imati na umu je da svaka dana gd slika mora biti bazirana na paleti ili imati realistične boje (RGB); to znači da ne postoji mogućnost uvođenja realističnih boja u slike na temelju palete.

Da biste dobili originalnu praznu sliku na temelju palete, trebate pozvati funkciju ImageCreate(), a da biste dobili sliku u pravim bojama, koristite funkciju ImageCreateTrueColor().

Slike temeljene na paletama

Boje su navedene u crveno-zeleno-plavom (RGB) formatu, koristeći tri broja od 0 do 255. Na primjer, boja određena brojevima (255, 0, 0) je jarko crvena, boja ( 0, 255, 0) - zelena, boja (0, 0, 255) - plava, boja (0, 0, 0) - crna, boja (255, 255, 255) - bijela i boja (127, 127, 127) - siva. Stvaranjem sve više i više novih boja, možete proizvoljno birati vrijednosti tri komponente boje.

Svaki crtež na slici mora biti urađen određenom bojom, a boje moraju biti raspoređene na slici prije nego što se koriste. Osim toga, prva boja raspoređena na slici automatski postaje boja pozadine. Dakle, ni u kojem slučaju ne biste trebali pretpostaviti da možete bez navođenja boja, a obično je operacija distribucije boja prva operacija nakon stvaranja nove prazne slike.

Boje u slikama koje se temelje na paleti stvaraju se pomoću funkcije imagecolorallocate(), koja kao parametre uzima sliku (prethodno stvorenu) i tri cijela broja koja određuju udio crvene, zelene i plave boje. Povratna vrijednost je cijeli broj koji specificira indeks nove boje u unutarnjoj paleti slike. Ova povratna vrijednost mora se dodijeliti varijabli jer je navedena vrijednost indeksa potrebna za izvođenje svih budućih operacija korištenjem ove boje.

Slike temeljene na paleti mogu imati najveći broj boja od 256. (Čitatelja može, ali i ne mora zanimati na čemu se takve slike zapravo temelje, ali svaki piksel u slici temeljenoj na paleti zapravo je jedan bajt koji pohranjuje indeks jednog elementa u paleti od 256 boja.)

Imajte na umu da indeks koji se vraća kada se distribuira jedna od boja na slici ima smisla samo za tu sliku. Na primjer, ako PHP skripta dodijeli $black boji raspoređenoj na jednoj slici, tada nema smisla koristiti tu varijablu kao unos boje u naredbu za crtanje koja se poziva za obradu druge slike.

Slike s realističnim bojama

gd 2.0 i kasnije također pružaju mogućnost stvaranja slika koje se ne temelje na paletama u kojima svaki piksel pohranjuje proizvoljan broj RGB boje. U ovom takozvanom formatu prave boje, broj mogućih boja je iznimno velik. Ne samo da ova značajka neograničeno proširuje opseg umjetničkog izražavanja, već vam također omogućuje vjernu reprodukciju PNG i JPEG slika s realističnim bojama učitanim u memoriju pomoću alata gd.

Osim što se drugačija funkcija koristi za stvaranje početne slike i nema ograničenja za odabir različitih boja, načela rada sa slikama u pravim bojama slična su onima slika temeljenih na paletama.

Konkretno, još uvijek možete pozvati ImageColorAllocate() za stvaranje novih boja i dodjeljivanje varijabli povratne vrijednosti za kasniju upotrebu u naredbama za crtanje. Jedina razlika je u tome što je povratna vrijednost RGB broj boje, a ne indeks elementa u paleti. Dodatno, na slikama s realističnim bojama ne postoji koncept pozadinske boje stvorene kao nuspojava funkcije ImageColorAllocate(); Kao rezultat inicijalizacije, svim pikselima se dodjeljuje crna oznaka (0, 0, 0).

Transparentnost

Verzije gd 2.x podržavaju koncept transparentnosti. Ovo koristi alfa kanal (uz crvene, zelene i plave vrijednosti) za označavanje koliko je boja prozirna. To omogućuje, na primjer, da se jedan oblik preklapa s drugim tako da prvi oblik ostane djelomično vidljiv umjesto da potpuno preklapa drugi.

U PHP-u, mnoge funkcije za rad sa slikama imaju analog koji sadrži riječ "alpha" u nazivu, što ukazuje da je u tim funkcijama boja predstavljena s četiri vrijednosti (R, G, B, A). Na primjer, funkcija imageColorAllocate() uzima tri parametra, a kada pozivate funkciju ImageColorAllocateAlpha(), morate navesti četvrti parametar s vrijednošću između 0 i 127. Vrijednost nula označava da je boja potpuno neprozirna, a vrijednost od 127 označava da je boja potpuno neprozirna.prozirna

Naredbe za koordinate i crtanje

Nakon stvaranja slike pomoću alata gd, implicitno se stvara koordinatni sustav koji vam omogućuje da odredite naredbe za crtanje unutar njega. Granične vrijednosti koordinata u ovom sustavu određene su navedenim parametrima širine i visine slike.

Ishodište koordinata u ovom sustavu, koje odgovara koordinatama (0, 0), nalazi se u gornjem lijevom kutu slike. Pozitivan smjer za X vrijednosti je s lijeva na desno, a za Y vrijednosti je od vrha prema dolje. (U koordinatnim sustavima računalne grafike ova lokacija ishodišta je uobičajena, ali oni koji su proučavali analitičku geometriju izgleda da su navikli da je ishodište u donjem lijevom kutu dijagrama.)

Broj naredbi za crtanje je vrlo velik. Ove naredbe uključuju, ali nisu ograničene na naredbe za crtanje segmenata linija, pravokutnika i lukova, kao i naredbe za postavljanje specifičnih vrijednosti piksela. Ali imajte na umu da je krajnji rezultat svih ovih naredbi za crtanje i iscrtavanje postavljanje vrijednosti piksela. Nakon izvršavanja naredbi koje mijenjaju vrijednosti piksela, ne ostaje nikakav trag u memoriji (osim samih promijenjenih vrijednosti), tako da ne postoji način da se nadjačaju naredbe za crtanje i iscrtavanje ili da se rezultati različitih naredbi prikazuju zasebno.

Ništa ne sprječava crtanje naredbi koje se protežu izvan navedene slike, ali takvo crtanje nema vidljiv učinak. Na primjer, pravokutnik neće biti vidljiv na slici ako su sve vrijednosti koordinata negativne.

Pretvorba formata

Sve operacije crtanja i obrade slike izvode se na slici predstavljenoj u internom gd formatu. A nakon što su te operacije dovršene, skripta može pozvati jednu od naredbi za pretvorbu i izlaz (imagepng, imagetjpeg, itd.) kako bi pretvorila ovu sliku u traženi grafički format i ispisala je u prozor korisničkog preglednika (ili u datoteku).

Oslobađanje resursa

Nakon što se rezultat pretvorbe dovršene gd slike prenese korisniku, možemo smatrati da je rad s internom verzijom završen. To znači da ova verzija mora biti uništena. Ispravan način za to je pozvati imagedestroy() sa slikom kao parametrom.

gd knjižnične funkcije

U ovom članku nećemo posebno nabrajati i opisivati ​​sve funkcije koje se nalaze u gd sučelju PHP interpretera. Kako biste se upoznali s ovim informacijama, preporučujemo korištenje odjeljka "Obrada i generiranje slika" u priručniku za php.net. Većina gd funkcija spada u jednu od kategorija prikazanih u donjoj tablici. Imajte na umu da su nazivi funkcija navedeni u ovoj tablici napisani velikim slovima kako bi prvo slovo svake riječi bilo lakše čitljivo, ali ovaj se uvjet ne poštuje uvijek u primjerima koda jer nazivi PHP funkcija ne razlikuju velika i mala slova:

Klasifikacija gd funkcija Tip Primjer Napomena
Funkcije stvaranja slike ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Vrati novu gd sliku. Funkcija ImageCreate() kao parametre uzima širinu i visinu slike, a parametri ostalih funkcija su put datoteke, URL ili niz koji sadrži prethodno kreiranu sliku koju treba učitati i pretvoriti u gd format
Funkcije koje izvode operacije distribucije boja ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() Funkcija ImageColorAllocate() uzima oznaku slike i potrebne vrijednosti crvene, zelene i plave kao parametre, a zatim vraća broj boje za kasniju upotrebu u operacijama crtanja i iscrtavanja. Funkcija ImageColorAllocateAlpha prihvaća dodatni parametar - koeficijent prozirnosti (0-127)
Funkcije koje izvode operacije usklađivanja boja ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Vrati indeks odgovarajuće boje u paletiranoj slici. Funkcije koje u svom nazivu sadrže riječ "Najbliže" vraćaju boju koja se najviše podudara (točnost podudaranja mjeri se kao udaljenost između točaka u prostoru RGB vrijednosti); funkcije s oznakom "Točno" vraćaju broj boje samo ako je identičan traženoj, inače vraćaju vrijednost -1, funkcije s nazivom "Alfa" rade s bojama koje se određuju pomoću četiri vrijednosti (s prozirne boje)
Funkcije crtanja linija ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Koriste se za crtanje ravnih segmenata ili krivulja određenog oblika. Tipično, prvi parametar svake od ovih funkcija je slika, zadnji parametar je boja, a međuparametri su X i Y koordinate.
Postavke olovke za crtanje linija ImageSetStyle(), ImageSetThickness() Promijenite postavke koje utječu na karakteristike linija koje proizvode naknadne naredbe za crtanje linija (neke od ovih funkcija primjenjive su samo na gd 2.0.1 ili novije verzije)
Funkcije crtanja i punjenja ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() U pravilu su slične odgovarajućim funkcijama za crtanje linija, ali omogućuju ne samo crtanje obrisa područja, već i ispunjavanje stvorenih područja bojom. Posebna funkcija ImageFill() izvodi operaciju ispune koristeći specificiranu boju ispune. Ispunjavanje se vrši u svim smjerovima počevši od navedenih XY koordinata (neke od ovih značajki zahtijevaju gd 2.0.1 ili noviju verziju)
Funkcije za rad s tekstom ImageString(), ImageLoadFont() Funkcija ImageString kao parametre uzima ručku slike, broj fonta, X i Y koordinate, tekstualni niz i boju. Ako je broj fonta između 1 i 5, tada se koristi jedan od pet ugrađenih fontova za prikaz linije u ovoj boji. S druge strane, broj fonta veći od 5 označava rezultat učitavanja specijaliziranog fonta pomoću funkcije ImageLoadFont()
Eksportne funkcije ImagePng(), ImageJpeg() Pretvorite unutarnju gd sliku u sliku odgovarajućeg formata, a zatim pošaljite tu sliku u izlazni tok. Ako je naveden samo jedan parametar (ručka za sliku), tada se slika prikazuje korisniku, a ako se koristi dodatni parametar, a to je put datoteke, odredište izlaznog toka postaje datoteka
Funkcija uništavanja slike ImageDestroy() Uzima oznaku slike kao parametar i oslobađa sve resurse povezane sa slikom
Podrška za HTTP slike

Kako bi slika bila ispravno prikazana u pregledniku korisnika, potrebno je odrediti odakle slika treba doći i koji je njen format. Stoga, nažalost, nije moguće jednostavno implementirati, primjerice, poziv imageToPng() funkcije u generiranoj HTML datoteci i time riješiti problem prikaza slike. U osnovi, morate ispreplesti izlazni kod slike s HTML kodom generiranim u PHP skripti, a da biste to učinili, možete koristiti jednu od tri opcije opisane u nastavku.

Stvaranje slika cijele stranice

Cijela generirana stranica može se formatirati kao slika. U ovom slučaju morate proslijediti HTTP zaglavlje ispred slikovnih podataka, čime izjavljujete da je ono što slijedi slika određene vrste. Na primjer, sljedeći redovi mogu biti navedeni na kraju skripte:

// ... kod koji stvara sliku i dodjeljuje je // varijabli $image header("Content-type: image/png"); // Prikaz naslova u pregledniku imagepng($image); // Proslijedite podatke same slike, pretvorene u PNG format imagedestroy($image); // Oslobađanje resursa

Prednost ovog pristupa je u tome što se sve informacije, uključujući POST parametre, mogu koristiti za prenošenje uputa o sastavu buduće slike. Nedostatak je to što rezultirajuća stranica ne može sadržavati nikakav regularni HTML kod. Zapravo, čak morate paziti da ne pošaljete tekst prije naslova i slike u skriptama, budući da je to jednako preuranjenom slanju sadržaja. U tom slučaju pojavljuje se poruka o pogrešci "Zaglavlja su već poslana...".

Ugrađivanje slika pohranjenih u datoteke

Prije svega, imajte na umu da HTML podržava deskriptor , koji vam omogućuje da ugradite sliku navođenjem putanje slikovne datoteke ili URL-a, kao u sljedećem primjeru:

Ovaj dizajn se odnosi na statične slikovne datoteke, ali nema razloga zašto ne bi mogao omogućiti ugradnju novostvorene slike. Stoga možete pripremiti skriptu u kojoj se prvo stvara slika, zatim se slikovni podaci zapisuju u lokalnu datoteku, a zatim se generira HTML kod s odgovarajućim deskriptorom , pokazujući na novostvorenu datoteku.

Jedini nedostaci ovog pristupa su da, prvo, proces stvaranja stranice mora uključivati ​​pisanje datoteka, što može biti dugotrajan, i, drugo, morate odlučiti što ćete učiniti s datotekama kada završite s njihovom upotrebom.

Ali u određenoj situaciji ovaj je pristup idealan. Radi se o stvaranju i predmemoriranju slika koje predstavljaju konačan skup izbora. U ovom slučaju postoji poseban način povezivanja određene situacije s nazivom slikovne datoteke. Kada se pojave neke od ovih situacija koje zahtijevaju izlaz slike, provjerava se da li odgovarajuća datoteka već postoji. Ako je odgovor pozitivan, poveznica na ovu datoteku se jednostavno primjenjuje, formatirana kao deskriptor , a ako je odgovor negativan, stvara se slika, zapisuje se u datoteku, a zatim se ponovno primjenjuje veza na tu sliku. U konačnici, stvaranje novih datoteka jednostavno neće biti potrebno.

Ugrađivanje slika generiranih u skriptama

Konačno, nema razloga zašto ne biste mogli osigurati samostalnu slikovnu skriptu i zatim ugraditi rezultirajuću sliku u dinamičku stranicu koju generira druga skripta navođenjem u deskriptoru URL ove skripte. Jedina poteškoća je odabir načina prijenosa potrebnih podataka na zavisnu stranicu. Na primjer, oznaka koja označava ugrađenu sliku može izgledati ovako:

U ovom slučaju, skripta ballpage.php vraća PNG slike obojenih loptica koje se nalaze na različitim pozicijama na slici.

No korištenje ovog pristupa može uzrokovati probleme jer web poslužitelji i preglednici ponekad provjeravaju sufikse datoteka koje se obrađuju i, kada prime rezultate provjere, reagiraju na njih drugačije. Na primjer, skripti za renderiranje ballpage možda će trebati dati ekstenziju .php kako bi Apache poslužitelj mogao utvrditi da se kod poslužitelja treba tumačiti kao PHP kod (iako se potrebni način obrade također može navesti putem konfiguracijskih datoteka).

Međutim, postoje i nestandardne verzije preglednika koje ne uzimaju u obzir mogućnost da datoteka s nastavkom .php proizvodi sliku, iako proslijeđeno zaglavlje označava da slika slijedi. Stoga, kada koristite ovu metodu, morate testirati skripte u različitim preglednicima i osigurati da će predviđeni krug korisnika dobiti stranice u obliku u kojem ste to zamislili.

Ispod su primjeri korištenja gd biblioteke za stvaranje slika.

Primjer korištenja gd biblioteke: stvaranje jednostavnih oblika

U sljedećem primjeru pokazat ćemo kako koristiti gd biblioteku za generiranje crteža koji sadrži jednostavne geometrijske oblike:

Zamijenite postavke svojima i spremite ovu datoteku pod imenom connect-to-database.php u mapu fcdemo.

Ubacimo nasumične podatke

Da je ovo pravi projekt, tablica korisnika bi s vremenom rasla, ali zbog demonstracije moramo ubaciti neke podatke. Napišimo malu skriptu koja će ubaciti nasumične podatke u tablicu. Ne brinite ako ne razumijete sljedeći kôd - nije važan za ovaj vodič.

Spremite ovu datoteku pod nazivom generate-random-data.php sve u istu mapu.

Prvo uključujemo datoteku veze s bazom podataka. Zatim postavljamo vremenski okvir iz kojeg će se nasumično odabrati vrijeme za registraciju korisnika. Možete promijeniti broj redaka koji će se umetnuti. Da biste to učinili, trebate prilagoditi varijablu $RecordsToInsert.

Zatim pokrećemo skriptu za umetanje generiranih zapisa u bazu podataka. Kako biste pokrenuli ovaj proces, idite na ovu adresu - http://localhost/fcdemo/generate-random-data.php.

Na kraju biste trebali vidjeti poruku: "Umetnuti ($RecordsToInsert) zapisi"

Korak 2. Pripremite kostur web stranice

Moramo stvoriti vrlo jednostavnu stranicu za prikaz našeg grafikona. Nešto kao ovo:

FusionCharts v3.2 - LinkedCharts PHP demo