Kreiranje grafa pomoću GD biblioteke. Crtanje grafova u PHP-u Šta smo promenili

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

  • Statičke slike, kreirane samostalno ili odnekud posuđene, mogu se ugraditi u HTML stranicu.
  • Mogu se koristiti programski generirane slike (HTML + CSS).
  • Možete koristiti gd biblioteku da unapred kreirate statičku grafiku za sve moguće situacije koje se mogu pojaviti tokom izvršavanja skripte, sačuvati ih u fajlovima i prikazati ih uslovno.

Nećemo razmatrati opciju uvođenja grafike pomoću statičkih 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 stranice su poznati horizontalni grafikoni sa obojanim stranama, koji se posebno često koriste za ilustraciju rezultata ankete. Na prvi pogled se čini da se za kreiranje ovakvih dijagrama koriste neki grafički alati, ali u stvarnosti je dovoljno koristiti nekoliko jednostavnih skripti:

Rad sa grafikom u PHP, HTML, CSS /* CSS stilovima koji formiraju dizajn */ body div (visina: 1em; display: inline-block; vertical-align: middle) span ( display: inline-block; širina: 120px) .narandža (pozadina: narandžasta ) .jabuka (pozadina: #33CC66 ) .banana (pozadina: žuta ) .paradajz (pozadina: crvena ) .krastavac (pozadina: zelena ) .krompir (pozadina: siva ) Narudžbenica Voće Narandže Jabuke Banane Povrće Paradajz Krastavci Krompir

Ovaj primjer ne demonstrira nikakve nove funkcije PHP-a, već jednostavno pokazuje jednostavan način za kreiranje grafike pomoću HTML-a i CSS-a (u ovom slučaju trakastih dijagrama):

gd biblioteka

Grafički alati opisani u prethodnom odeljku praktično iscrpljuju mogućnosti standardnog HTML koda (iako je vrijedno napomenuti da nismo pokrili prilično moćan alat za kreiranje grafike HTML5 Canvas). Sada pređimo na opisivanje metoda za kreiranje zaista proizvoljnih grafika pomoću gd biblioteke.

Opšti opis gd biblioteke

Uopšteno govoreći, gd toolkit je biblioteka C koda za kreiranje i manipulaciju slikama. Ovu biblioteku su prvobitno razvili i učinili dostupnim javnosti 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, gd biblioteka pruža funkcije koje može pozvati bilo koji program za izvođenje željene manipulacije slikama. To znači da se gd biblioteka može povezati sa bilo kojim C programom u kojem je potrebno koristiti kod ove biblioteke. Upravo to je problem koji su programeri PHP sistema riješili.

U stvari, skup funkcija interfejsa je napisan za ovu svrhu koje olakšavaju pozivanje gd procedura iz PHP skripte. Ali sama gd biblioteka ne sadrži nikakav PHP-specifičan kod, a interfejsi su razvijeni kako bi se omogućilo pristup biblioteci iz nekoliko drugih programskih jezika i programskih okruženja, uključujući Perl, Pascal, Haskell i REXX.

Biblioteka gd vam omogućava da pozovete funkcije da kreirate izvorne slike (u početku prazne, nalik na prazan list papira), crtate i slikate unutar tih izvornih slika na različite načine i na kraju pretvorite sliku iz unutrašnjeg formata slike gd-a u standardni format slike, a zatim je pošaljite na konačno odredište (izlaz u prozor pretraživača ili sačuvajte u datoteci ili bazi podataka). A budući da se sve ove operacije izvode pod kontrolom programa, a ne ručno, kreirane slike mogu postati složene po želji i ovisiti o bilo kojoj situaciji u toku izvršavanja programa o kojoj je poželjno da ih učini zavisnim.

Formati slika

Biblioteka gd vam u osnovi omogućava uvoz i izvoz slika koristeći širok izbor formata. Najpopularniji formati slika su GIF, JPEG i PNG, iako korišteni primjeri prvenstveno koriste potonje.

GIF i PNG formati su namijenjeni za opis 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ćava da kreirate izražajnije slike, jer vam omogućava da pružite bilo koji broj različitih boja, a poslednja opcija vam pomaže da kreirate 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 obavlja 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, količina potrebne memorije je već preko pola megabajta.

Tema kompresije je široka i složena, ali većina algoritama kompresije se zasniva na smanjenju redundantnosti slike kako bi se smanjila njena veličina. (Na primjer, trebat će manje memorijskog prostora da se specificira da je svaki piksel na slici zelen nego da se specificira zelena vrijednost za svaki piksel pojedinačno.) Nažalost, algoritmi kompresije se ne oslanjaju na korištenje ovih svojstava jer moraju odlučiti o tome složeni problemi da su metode za rješavanje ovih problema, implementirane u algoritam kompresije koji se koristi za generiranje slika u GIF formatu, čak i patentirane.

Instaliranje biblioteke

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

Stoga instalacija gd biblioteke mora početi od nultog koraka - provjerom da li je ova biblioteka već instalirana. Prvo unesite sljedeći kod u datoteku skripte i pogledajte rezultate pokretanja u vašem pretraživaču, bilo da vaše skripte pokreće vaša kompanija za web hosting ili ih u potpunosti pokreće vaša vlastita instalacija:

Nakon što prikažete ovu stranicu na ekranu, jednostavno potražite tekstualni niz "gd" u prozoru pretraživača. Ovo bi trebalo da otkrije pododeljak koji opisuje u kojoj meri vaša PHP instalacija dozvoljava podršku za gd biblioteku. Ako namjeravate pripremiti samo određene vrste slika (na primjer PNG), a rezultati funkcije phpinfo() pokazuju da je podrška za tu vrstu slike omogućena, možete odmah početi. A ako informacije o gd verziji uključuju riječ "paket", onda se koristi gd biblioteka koja dolazi s PHP-om.

Ako pokušaj da se pronađe spominjanje gd biblioteke završi neuspešno, a vi sami instalirate PHP, tada možete instalirati i konfigurisati konfiguraciju gd biblioteke. (S druge strane, ako vašom instalacijom PHP-a upravlja vaša hosting kompanija, vaše jedine opcije su da zatražite od te kompanije da pruži podršku za gd biblioteku ili koristite drugu kompaniju za web hosting.)

Korišćenje gd biblioteke koja dolazi uz PHP eliminiše mnoge probleme povezane sa instaliranjem gd-a, ali ne sve. Činjenica je da korištenje same verzije uključene u distribucijski komplet omogućava vam da dobijete gd biblioteku, ali ne nužno sve biblioteke potrebne za rad gd-a. Sama gd biblioteka zavisi od nekoliko drugih biblioteka: libpng (za manipulisanje PNG slikama), zlib (za kompresiju) i jpeg-6b ili novije (za manipulisanje JPEG slikama ako je potrebno). Ove biblioteke su već prisutne u mnogim Linux instalacijama, u kom slučaju može biti dovoljno uključiti potrebnu opciju with (kao što je --with-zlib) u opcije bez navođenja instalacijskog direktorija. Ako sami radite PHP konfiguraciju, možete jednostavno dodati opciju --with-gd kako biste osigurali da je uključena verzija gd-a uključena u izvršni fajl. A ako želite ukazati na drugu verziju, umjesto toga koristite opciju --with-gd=path.

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

Osnovni principi rada sa gd bibliotekom

Kada se slika kreira ili manipulira pomoću gd alata, slika je predstavljena u posebnom gd formatu koji ne odgovara bilo kojem konvencionalnom tipu slike. Teoretski je moguće izvesti slike u ovom gd formatu, ali se takva operacija rijetko koristi jer se rezultirajuća slika ne komprimuje i ne može se prikazati u pretraživaču ili jednostavnom grafičkom programu.

Slika obrađena pomoću gd alata karakteriziraju informacije o širini, visini i boji svih piksela, čiji je broj jednak proizvodu širine i visine. Tipično, program započinje svoju interakciju sa gd bibliotekom bilo kreiranjem nove prazne slike (na kojoj će se crtati i crtati), ili uvozom slike iz datoteke. Obično se izvode sljedeći koraci: prvo, distribucija boja na slici, drugo, crtanje i slikanje ili manipulacija slikom pomoću nekih drugih operacija, treće, pretvaranje slike u općeprihvaćeni format (npr. PNG ili JPEG) i prenijeti na odredište.

Reprezentacija boja

Postoje dva načina za predstavljanje boja u gd slikama: reprezentacija zasnovana na paleti, koja je ograničena na 256 boja, i reprezentacija u pravim bojama, koja vam omogućava da navedete proizvoljan broj različitih RBG brojeva boja. U gd 1.x, jedina opcija je bila korištenje boja zasnovanih na paleti, ali u gd 2.x i verziji ove biblioteke uključene u PHP, moguće je kreirati i slike zasnovane na paleti i slike u realističnim bojama. Jedna stvar koju treba imati na umu je da svaka data gd slika mora biti ili bazirana na paleti ili imati prave boje (RGB); to znači da ne postoji opcija za uvođenje realističnih boja u slike na osnovu palete.

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

Slike zasnovane na paleti

Boje su specificirane u crveno-zeleno-plavom (RGB) formatu, koristeći tri broja od 0 do 255. Na primjer, boja određena brojevima (255, 0, 0) je svijetlo 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 odabrati vrijednosti tri komponente boja.

Svaki crtež na slici mora biti urađen određenom bojom, a boje moraju biti raspoređene na slici prije nego što se koriste. Uz to, prva boja distribuirana na slici automatski postaje boja pozadine. Dakle, ni u kom slučaju ne treba pretpostaviti da možete bez navođenja boja, a obično je operacija raspodjele boja prva operacija nakon kreiranja nove prazne slike.

Boje u slikama zasnovanim na paleti kreiraju se pomoću funkcije imagecolorallocate(), koja kao parametre uzima sliku (prethodno kreiranu) i tri cijela broja koja određuju udio crvene, zelene i plave boje. Povratna vrijednost je cijeli broj koji specificira indeks nove boje u internoj paleti slike. Ova povratna vrijednost mora biti dodijeljena varijabli jer je navedena vrijednost indeksa potrebna za izvođenje svih budućih operacija koristeći ovu boju.

Slike zasnovane na paleti mogu imati maksimalan broj boja od 256. (Čitaoca može ili ne mora zanimati na čemu su takve slike zapravo zasnovane, ali svaki piksel u slici zasnovanoj na paleti je zapravo jedan bajt koji pohranjuje indeks jednog elementa u paleti od 256 boja.)

Imajte na umu da je indeks vraćen prilikom distribucije jedne od boja na slici značajan samo za tu sliku. Na primjer, ako PHP skripta dodjeljuje $black boji raspoređenoj u jednoj slici, onda nema smisla koristiti tu varijablu kao unos boje za naredbu za crtanje koja se zove za obradu druge slike.

Slike sa realističnim bojama

gd 2.0 i novije verzije takođe pružaju mogućnost kreiranja slika koje nisu zasnovane na paleti u kojima svaki piksel pohranjuje proizvoljan RGB broj boje. U ovom takozvanom formatu prave boje, broj mogućih boja je izuzetno velik. Ova funkcija ne samo da neograničeno proširuje opseg umjetničkog izražavanja, već vam također omogućava da vjerno reprodukujete PNG i JPEG slike sa stvarnim bojama učitanim u memoriju pomoću gd alata.

Osim što se za kreiranje početne slike koristi druga funkcija i nema ograničenja u odabiru različitih boja, principi rada sa slikama u pravim bojama su slični onima sa slikama zasnovanim na paleti.

Konkretno, još uvijek možete pozvati ImageColorAllocate() da kreirate nove boje i dodijelite varijablu povratnu vrijednost 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. Osim toga, u slikama sa realističnim bojama, ne postoji koncept boje pozadine stvorene kao nuspojava funkcije ImageColorAllocate(); Kao rezultat inicijalizacije, svim pikselima je dodijeljena oznaka crna (0, 0, 0).

Transparentnost

Verzije gd 2.x podržavaju koncept transparentnosti. Ovo koristi alfa kanal (pored crvenih, zelenih i plavih vrijednosti) za označavanje koliko je boja prozirna. Ovo omogućava, na primjer, da se jedan oblik preklopi na drugi tako da prvi oblik ostane djelomično vidljiv umjesto da se potpuno preklapa s drugim.

U PHP-u mnoge funkcije za rad sa slikama imaju analogni naziv koji sadrži riječ "alfa", što ukazuje da je u ovim funkcijama boja predstavljena sa č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

Koordinate i komande za crtanje

Nakon kreiranja slike pomoću alata gd, implicitno se kreira koordinatni sistem koji vam omogućava da navedete komande za crtanje unutar njega. Granične vrijednosti koordinata u ovom sistemu određuju se navedenim parametrima širine i visine slike.

Porijeklo koordinata u ovom sistemu, koje odgovaraju koordinatama (0, 0), nalazi se u gornjem lijevom uglu slike. Pozitivan smjer za X vrijednosti je slijeva na desno, a za Y vrijednosti je odozgo prema dolje. (U koordinatnim sistemima kompjuterske 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 levom uglu dijagrama.)

Broj naredbi za crtanje je veoma 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 crtanje postavljanje vrijednosti piksela. Nakon izvršavanja naredbi koje mijenjaju vrijednosti piksela, u memoriji ne ostaje nikakav trag (osim samih promijenjenih vrijednosti), tako da ne postoji način da se nadjačaju naredbe za crtanje i crtanje ili da se rezultati različitih naredbi predstave zasebno.

Ništa ne može spriječiti naredbe za crtanje 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.

Konverzija formata

Sve operacije crtanja i manipulacije slikama se izvode na slici predstavljenoj u internom gd formatu. A nakon što se ove operacije završe, skripta može pozvati jednu od naredbi za konverziju i izlaz (imagepng, imagetjpeg, itd.) da pretvori ovu sliku u potreban grafički format i iznese je u prozor pretraživača korisnika (ili u datoteku).

Oslobađanje resursa

Kada se rezultat konverzije završene gd slike prenese korisniku, možemo smatrati da je rad sa internom verzijom završen. To znači da ova verzija mora biti uništena. Ispravan način da to učinite je da pozovete imagedestroy() sa slikom kao parametrom.

gd funkcije biblioteke

Nećemo posebno navoditi i opisivati ​​u ovom članku sve funkcije koje se nalaze u gd interfejsu PHP interpretera. Da biste se upoznali sa ovim informacijama, preporučujemo da koristite odeljak “Obrada i generisanje slika” u php.net priručniku. Većina gd funkcija spada u jednu od kategorija prikazanih u tabeli ispod. Imajte na umu da su imena funkcija navedena u ovoj tabeli napisana velikim slovom kako bi se prvo slovo svake riječi lakše čitalo, ali ovaj uvjet se ne poštuje uvijek u primjerima koda jer imena PHP funkcija ne razlikuju velika i mala slova:

Klasifikacija gd funkcija Unesite Primjer Napomena
Funkcije kreiranja slike ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Vratite novu gd sliku. Funkcija ImageCreate() kao parametre uzima širinu i visinu slike, a parametri ostalih funkcija su putanja datoteke, URL ili niz koji sadrži prethodno kreiranu sliku koju treba učitati i pretvoriti u gd format
Funkcije koje izvode operacije raspodjele boja ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() Funkcija ImageColorAllocate() uzima ručicu slike i potrebne vrijednosti crvene, zelene i plave kao parametre, a zatim vraća broj boje za kasniju upotrebu u operacijama crtanja i crtanja. Funkcija ImageColorAllocateAlpha prihvata dodatni parametar - koeficijent transparentnosti (0-127)
Funkcije koje izvode operacije podudaranja boja ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Vratite indeks odgovarajuće boje u paleti slike. Funkcije koje sadrže riječ "Closest" u svom nazivu vraćaju boju koja se najviše podudara (preciznost podudaranja se mjeri kao udaljenost između tačaka u prostoru RGB vrijednosti); funkcije sa oznakom "Exact" vraćaju broj boje samo ako je identičan traženom, u suprotnom vraćaju vrijednost -1, funkcije s nazivom "Alpha" rade na bojama koje se određuju pomoću četiri vrijednosti (sa 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, posljednji parametar je boja, a međuparametar su koordinate X i Y.
Postavke olovke za crtanje linija ImageSetStyle(), ImageSetThickness() Promijenite postavke koje utječu na karakteristike linija koje su proizvele naknadne naredbe za crtanje (neke od ovih funkcija primjenjive su samo na gd 2.0.1 ili novije verzije)
Funkcije crtanja i popunjavanja ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() U pravilu su slične odgovarajućim funkcijama za crtanje linija, ali omogućavaju ne samo crtanje kontura područja, već i ispunjavanje stvorenih područja bojom. Posebna funkcija ImageFill() izvodi operaciju popunjavanja koristeći specificiranu boju ispune. Popunjavanje se vrši u svim smjerovima počevši od navedenih XY koordinata (neke od ovih mogućnosti zahtijevaju gd 2.0.1 ili noviji)
Funkcije za rad sa tekstom ImageString(), ImageLoadFont() Funkcija ImageString kao parametre uzima ručicu slike, broj fonta, X i Y koordinate, tekstualni niz i boju. Ako je broj fonta između 1 i 5, tada se jedan od pet ugrađenih fontova koristi 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()
Izvozne funkcije ImagePng(), ImageJpeg() Pretvorite internu gd sliku u sliku odgovarajućeg formata, a zatim pošaljite ovu sliku u izlazni tok. Ako je naveden samo jedan parametar (ručnik slike), tada se slika prikazuje korisniku, a ako se koristi dodatni parametar, a to je putanja datoteke, odredište izlaznog toka postaje datoteka
Funkcija uništavanja slike ImageDestroy() Uzima ručku slike kao parametar i oslobađa sve resurse povezane sa slikom
Podrška za HTTP sliku

Da bi slika bila pravilno predstavljena u pretraživaču korisnika, potrebno je navesti odakle slika treba da dolazi i koji je njen format. Stoga, nažalost, nije moguće jednostavno implementirati, na primjer, poziv funkcije imageToPng() u generiranu HTML datoteku i time riješiti problem prikazivanja slike. U suštini, morate zamijeniti izlazni kod slike sa HTML kodom generiranim u PHP skripti, a za to možete koristiti jednu od tri opcije opisane u nastavku.

Kreiranje slika preko cele stranice

Cijela generirana stranica može se formatirati kao slika. U ovom slučaju, potrebno je da prosledite HTTP zaglavlje koje prethodi podacima o slici, deklarišući na taj način da je ono što sledi slika određenog tipa. Na primjer, na kraju skripte mogu se navesti sljedeće linije:

// ... kod koji kreira sliku i dodjeljuje je // varijabli $image header("Content-type: image/png"); // Prikaži naslov u pretraživaču imagepng($image); // Proslijediti podatke same slike, konvertirane u PNG format imagedestroy($image); // Otpuštanje resursa

Prednost ovog pristupa je što se bilo koja informacija, uključujući POST parametre, može koristiti za prenošenje instrukcija o sastavu buduće slike. Loša strana je u tome što rezultirajuća stranica ne može sadržavati običan HTML kod. U stvari, čak morate paziti da ne pošaljete nikakav tekst prije naslova i slike u skriptama, jer je to jednako prevremenom slanju sadržaja. U tom slučaju, pojavljuje se poruka o grešci "Zaglavlja su već poslana...".

Ugrađivanje slika pohranjenih u fajlovima

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

Ovaj dizajn se odnosi na datoteke statične slike, ali nema razloga zašto ne bi mogao omogućiti ugrađivanje novokreirane slike. Stoga možete pripremiti skriptu u kojoj se prvo kreira slika, zatim se podaci slike upisuju u lokalnu datoteku, a zatim se generira HTML kod s odgovarajućim deskriptorom , pokazujući na novokreirani fajl.

Jedini nedostaci ovog pristupa su da, prvo, proces kreiranja stranice mora uključivati ​​upisivanje u fajlove, što može biti dugotrajno, i, drugo, morate odrediti šta ćete raditi s datotekama kada završite s njihovim korištenjem.

Ali u određenoj situaciji ovaj pristup je idealan. Radi se o kreiranju i keširanju slika koje predstavljaju konačan skup izbora. U ovom slučaju postoji specifičan način povezivanja određene situacije sa imenom datoteke slike. Kada se pojave neke od ovih situacija koje zahtijevaju izlaz slike, provjerava se da li već postoji odgovarajuća datoteka. Ako je odgovor pozitivan, jednostavno se primjenjuje veza do ove datoteke, formatirana kao deskriptor , a ako je odgovor ne, tada se kreira slika, upisuje se u datoteku, a zatim se ponovo primjenjuje link na ovu sliku. Na kraju krajeva, kreiranje novih datoteka jednostavno neće biti potrebno.

Ugrađivanje slika generiranih u skriptama

Konačno, nema razloga zašto ne biste mogli dati samostalnu skriptu slike, a zatim ugraditi rezultirajuću sliku u dinamičku stranicu generiranu drugom skriptom specificiranjem u deskriptoru URL ove skripte. Jedina poteškoća je odabir načina prenošenja potrebnih podataka na zavisnu stranicu. Na primjer, ručka koja označava ugrađenu sliku može izgledati ovako:

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

Ali korištenje ovog pristupa može uzrokovati probleme jer web serveri i pretraživači ponekad provjeravaju sufikse datoteka koje se obrađuju i, kada dobiju rezultate provjere, reaguju na njih drugačije. Na primjer, skripti za renderiranje ballpage možda treba dati ekstenziju .php kako bi Apache server mogao odrediti da se serverski kod tumači kao PHP kod (iako se potreban način obrade može odrediti i kroz konfiguracijske datoteke).

Međutim, postoje i nestandardne verzije pretraživača koje ne uzimaju u obzir mogućnost da fajl sa ekstenzijom .php proizvodi sliku, iako prosleđeno zaglavlje ukazuje da slika sledi. Stoga, kada koristite ovu metodu, morate testirati skripte u različitim pretraživačima i osigurati da će željeni krug korisnika dobiti stranice u obliku koji ste namjeravali.

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

Primjer korištenja gd biblioteke: kreiranje jednostavnih oblika

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

Zamijenite postavke svojim i sačuvajte ovu datoteku pod imenom connect-to-database.php u folder fcdemo.

Ubacimo nasumične podatke

Da je ovo pravi projekat, tabela korisnika bi vremenom rasla, ali radi demonstracije, moramo ubaciti neke podatke. Hajde da napišemo malu skriptu koja će umetnuti nasumične podatke u tabelu. Ne brinite ako ne razumijete sljedeći kod - to nije važno za ovaj vodič.

Sačuvajte ovu datoteku pod nazivom generate-random-data.php sve u istom folderu.

Prvo uključujemo datoteku povezivanja baze podataka. Zatim postavljamo vremenski okvir iz kojeg će se nasumično birati vrijeme za registraciju korisnika. Možete promijeniti broj redova koji će biti umetnuti. Da biste to učinili, morate podesiti varijablu $RecordsToInsert.

Zatim pokrećemo skriptu za umetanje generisanih zapisa u bazu podataka. Da 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 napraviti vrlo jednostavnu stranicu za prikaz našeg grafikona. Ovako nešto:

FusionCharts v3.2 - LinkedCharts PHP Demo