Vytvorenie grafu pomocou knižnice GD. Kreslenie grafov v PHP Čo sme zmenili

Ak chcete identifikovať použitie grafických nástrojov vo webových scenároch, zvážte nasledujúci rozsah možných prípadov použitia grafiky:

  • Statické obrázky, vytvorené nezávisle alebo požičané odniekiaľ, môžu byť vložené do HTML stránky.
  • Je možné použiť programovo generované obrázky (HTML + CSS).
  • Knižnicu gd môžete použiť na predbežné vytvorenie statickej grafiky pre všetky možné situácie, ktoré môžu nastať počas vykonávania skriptu, uložiť ich do súborov a podmienečne zobraziť.

Nebudeme uvažovať o možnosti zavedenia grafiky pomocou statických obrázkov kvôli jej jednoduchosti, preto najprv zvážime jednoduchú možnosť (HTML + CSS grafika) a potom zvážime použitie knižnice gd v PHP.

Grafika HTML + CSS

Návštevníci webových stránok poznajú vodorovné stĺpcové grafy s farebnými stranami, ktoré sa obzvlášť často používajú na znázornenie výsledkov prieskumu. Na prvý pohľad sa zdá, že na vytváranie takýchto diagramov sa používajú nejaké grafické nástroje, ale v skutočnosti stačí použiť niekoľko jednoduchých skriptov:

Práca s grafikou v PHP, HTML, CSS /* CSS štýly, ktoré tvoria dizajn */ body div ( height: 1em; display: inline-block; vertical-align: middle ) span ( display: inline-block; width: 120px ) .pomaranč ( pozadie: oranžový ) .jablko ( pozadie: #33CC66 ) .banán ( pozadie: žlté ) .paradajka ( pozadie: červené ) .uhorka ( pozadie: zelené ) .zemiak ( pozadie: sivý ) Objednávkový formulár Ovocie Pomaranče Jablká Banány Zelenina Paradajky Uhorky Zemiaky

Tento príklad neukazuje žiadne nové funkcie PHP, ale jednoducho ukazuje jednoduchý spôsob vytvárania grafiky pomocou HTML a CSS (v tomto prípade pruhové grafy):

knižnica gd

Grafické nástroje popísané v predchádzajúcej časti prakticky vyčerpávajú možnosti štandardného HTML kódu (hoci stojí za zmienku, že sme nepokryli pomerne výkonný nástroj na tvorbu grafiky HTML5 Canvas). Teraz prejdime k popisu metód na vytváranie skutočne ľubovoľnej grafiky pomocou knižnice gd.

Všeobecný popis knižnice gd

Všeobecne povedané, súprava nástrojov gd je knižnica kódu C na vytváranie obrázkov a manipuláciu s nimi. Túto knižnicu pôvodne vyvinuli a sprístupnili verejnosti talentovaní a štedrí zamestnanci Boutell.com.

Samotná knižnica gd nie je grafickým alebo kresliacim programom, ani nepredstavuje samostatnú aplikáciu alebo grafické používateľské rozhranie. Namiesto toho knižnica gd poskytuje funkcie, ktoré môže volať akýkoľvek program na vykonanie požadovanej manipulácie s obrázkom. To znamená, že knižnicu gd je možné prepojiť s ľubovoľným programom v jazyku C, v ktorom je potrebné použiť kód tejto knižnice. Presne tento problém riešili vývojári systému PHP.

V skutočnosti bola na tento účel napísaná sada funkcií rozhrania, ktoré uľahčujú volanie gd procedúr z PHP skriptu. Samotná knižnica gd však neobsahuje žiadny kód špecifický pre PHP a boli vyvinuté rozhrania, ktoré umožňujú prístup ku knižnici z niekoľkých ďalších programovacích jazykov a programovacích prostredí, vrátane Perl, Pascal, Haskell a REXX.

Knižnica gd vám umožňuje volať funkcie na vytváranie zdrojových obrázkov (na začiatku prázdnych, pripomínajúcich prázdny list papiera), kresliť a kresliť v rámci týchto zdrojových obrázkov rôznymi spôsobmi a nakoniec previesť obrázok z interného formátu obrázka gd na štandard. obrázkový formát a potom ho odošlite na konečné miesto určenia (výstup v okne prehliadača alebo uloženie do súboru či databázy). A keďže všetky tieto operácie sú vykonávané pod kontrolou programu a nie manuálne, vytvorené obrázky môžu byť také zložité, ako je potrebné, a závisia od akýchkoľvek situácií počas vykonávania programu, na ktorých je potrebné ich urobiť závislými.

Formáty obrázkov

Knižnica gd vám v podstate umožňuje importovať a exportovať obrázky pomocou širokej škály formátov. Najpopulárnejšie obrazové formáty sú GIF, JPEG a PNG, aj keď použité príklady používajú predovšetkým druhý.

Formáty GIF a PNG sú určené na opis mriežky farebných prvkov zodpovedajúcich pixelom s niektorými doplnkami. Prvým doplnkom je, že bunky môžu obsahovať skutočné čísla farieb alebo indexy do tabuľky čísel farieb. (Prvá možnosť vám umožňuje vytvárať výraznejšie obrázky, pretože vám umožňuje poskytnúť ľubovoľný počet rôznych farieb a posledná možnosť vám pomáha vytvárať kompaktnejšie obrázky.)

Druhý prídavok je nasledujúci. Samozrejme, koncepčná reprezentácia formátov GIF a PNG je pomerne jednoduchá, ale v praxi sa čítanie, písanie a prenos obrázkov v týchto formátoch vždy vykonáva v komprimovanej podobe. Kompresia je nevyhnutná, pretože ukladanie údajov reprezentovaných ako mriežka buniek vyžaduje veľké množstvo pamäte. Jednoduchý obrázok s rozmermi 500 x 400 pixelov obsahuje 200 000 pixelov a ak každý pixel vyžaduje tri bajty, množstvo potrebnej pamäte je už viac ako pol megabajtu.

Téma kompresie je široká a zložitá, ale väčšina kompresných algoritmov je založená na znížení redundancie obrazu, aby sa zmenšila jeho veľkosť. (Napríklad na určenie, že každý pixel na obrázku je zelený, bude potrebné menej miesta v pamäti, než na zadanie zelenej hodnoty pre každý pixel jednotlivo.) Nanešťastie, kompresné algoritmy sa nespoliehajú na používanie týchto vlastností, pretože sa musia rozhodnúť zložité problémy, že metódy na riešenie týchto problémov, implementované v kompresnom algoritme používanom na generovanie obrázkov vo formáte GIF, boli dokonca patentované.

Inštalácia knižnice

Úprimne povedané, úloha inštalácie knižnice gd a jej úspešného fungovania v spojení so systémom PHP je pomerne zložitá. Nie je to spôsobené žiadnymi nedostatkami v softvéri PHP alebo gd, ale je to úplne spôsobené problémami s konfiguráciou; najmä musíte pochopiť, kde by knižnice gd mali byť a v skutočnosti sú a zabezpečiť, aby sa správne dokončili kroky kompilácie a prepojenia všetkých spustiteľných súborov. Najlepšou možnou situáciou preto je, že používateľ zistí, že knižnica gd je už nainštalovaná a podpora gd je už v systéme PHP povolená (buď s láskavým dovolením webhostingovej spoločnosti alebo preto, že je súčasťou nainštalovaného systému PHP).

Inštalácia knižnice gd preto musí začať od kroku nula – skontrolovaním, či táto knižnica už bola nainštalovaná. Najprv zadajte nasledujúci kód do súboru skriptu a zobrazte výsledky jeho spustenia vo svojom prehliadači, či už vaše skripty spúšťa vaša webhostingová spoločnosť, alebo sú spustené výlučne vašou vlastnou inštaláciou:

Po zobrazení tejto stránky na obrazovke jednoducho vyhľadajte v okne prehliadača textový reťazec „gd“. Toto by malo odhaliť podsekciu popisujúcu rozsah, v akom vaša inštalácia PHP umožňuje podporu knižnice gd. Ak máte v úmysle pripraviť iba určité typy obrázkov (napríklad PNG) a výsledky funkcie phpinfo() naznačujú, že podpora pre tento typ obrázkov je povolená, môžete začať hneď. A ak informácie o verzii gd obsahujú slovo „balený“, potom sa použije knižnica gd, ktorá sa dodáva s PHP.

Ak pokus o nájdenie zmienky o knižnici gd skončí neúspechom a vy si inštalujete PHP sami, môžete nainštalovať a nakonfigurovať konfiguráciu knižnice gd. (Na druhej strane, ak vašu inštaláciu PHP spravuje vaša hostiteľská spoločnosť, jedinou možnosťou je požiadať túto spoločnosť o poskytnutie podpory pre knižnicu gd, alebo použiť inú webhostingovú spoločnosť.)

Používanie knižnice gd, ktorá sa dodáva s PHP, odstraňuje mnohé problémy spojené s inštaláciou gd, ale nie všetky. Faktom je, že použitie samotnej verzie, ktorá je súčasťou distribučnej súpravy, vám umožňuje získať knižnicu gd, ale nie nevyhnutne všetky knižnice potrebné na fungovanie gd. Samotná knižnica gd závisí od niekoľkých ďalších knižníc: libpng (na manipuláciu s obrázkami PNG), zlib (na kompresiu) a jpeg-6b alebo novší (na manipuláciu s obrázkami JPEG v prípade potreby). Tieto knižnice sú už prítomné v mnohých linuxových inštaláciách, v takom prípade môže stačiť zahrnúť požadované s voľbou (ako napríklad --with-zlib) do volieb bez zadania inštalačného adresára. Ak si konfiguráciu PHP robíte sami, môžete jednoducho pridať možnosť --with-gd, aby ste sa uistili, že zahrnutá verzia gd bude súčasťou spustiteľného súboru. A ak chcete poukázať na inú verziu, použite namiesto toho možnosť --with-gd=path.

Ak zistíte, že jedna alebo viacero požadovaných knižníc chýba, znamená to, že tieto knižnice budú musieť byť zostavené samostatne. Informácie o tom, kde nájdete aktuálne verzie, môžete začať prečítaním si dokumentácie na adrese www.libgd.org.

Základné princípy práce s knižnicou gd

Keď je obrázok vytvorený alebo s ním manipulovaný pomocou súpravy nástrojov gd, obrázok je reprezentovaný v špeciálnom formáte gd, ktorý nezodpovedá žiadnemu bežnému typu obrázka. V tomto formáte gd je teoreticky možné exportovať obrázky, ale takáto operácia sa používa zriedka, pretože výsledný obrázok nie je komprimovaný a nedá sa zobraziť v prehliadači alebo jednoduchom grafickom programe.

Obrázok spracovaný pomocou sady nástrojov gd je charakterizovaný informáciou o šírke, výške a farbe všetkých pixelov, ktorých počet sa rovná súčinu šírky a výšky. Program zvyčajne začína svoju interakciu s knižnicou gd buď vytvorením nového prázdneho obrázka (na ktorý sa má kresliť a kresliť), alebo importovaním obrázka zo súboru. Zvyčajne sa vykonávajú tieto kroky: po prvé, rozloženie farieb na obrázku, po druhé, kreslenie a maľovanie alebo manipulácia s obrázkom pomocou niektorých ďalších operácií, po tretie, prevod obrázka do všeobecne akceptovaného formátu (napríklad PNG alebo JPEG ) a preniesť na miesto určenia.

Reprezentácia farieb

Existujú dva spôsoby znázornenia farieb v obrázkoch gd: zobrazenie založené na palete, ktoré je obmedzené na 256 farieb, a zobrazenie skutočných farieb, ktoré vám umožňuje určiť ľubovoľný počet rôznych čísel farieb RBG. V gd 1.x bolo jedinou možnosťou použiť farby založené na palete, ale v gd 2.x a verzii tejto knižnice, ktorá je súčasťou PHP, je možné vytvárať obrázky založené na paletách aj obrázky v realistických farbách. Jedna vec, ktorú treba mať na pamäti, je, že každý daný gd obrázok musí byť buď založený na palete, alebo musí mať realistické farby (RGB); to znamená, že nie je možné zaviesť realistické farby do obrázkov založených na palete.

Ak chcete získať pôvodný prázdny obrázok na základe palety, musíte zavolať funkciu ImageCreate() a na získanie obrázka v skutočných farbách použite funkciu ImageCreateTrueColor().

Obrázky založené na palete

Farby sú špecifikované vo formáte Red-Green-Blue (RGB) pomocou troch čísel od 0 do 255. Napríklad farba určená číslami (255, 0, 0) je jasne červená, farba ( 0, 255, 0) - zelená, farba (0, 0, 255) - modrá, farba (0, 0, 0) - čierna, farba (255, 255, 255) - biela a farba (127, 127, 127) - šedá. Vytváraním stále nových a nových farieb si môžete ľubovoľne zvoliť hodnoty troch farebných zložiek.

Akákoľvek kresba na obrázku musí byť vykonaná špecifickou farbou a farby musia byť na obrázku pred použitím rozmiestnené. Okrem toho sa prvá farba distribuovaná na obrázku automaticky stane farbou pozadia. V žiadnom prípade by ste teda nemali predpokladať, že sa zaobídete bez určenia farieb a operácia rozloženia farieb je zvyčajne prvou operáciou po vytvorení nového prázdneho obrázka.

Farby v obrázkoch založených na palete sa vytvárajú pomocou funkcie imagecolorallocate(), ktorá berie ako parametre obrázok (vytvorený predtým) a tri celé čísla určujúce pomer červenej, zelenej a modrej. Návratová hodnota je celé číslo, ktoré určuje index novej farby vo vnútornej palete obrázka. Táto návratová hodnota musí byť priradená premennej, pretože zadaná hodnota indexu je potrebná na vykonanie všetkých budúcich operácií s použitím tejto farby.

Obrázky založené na palete môžu mať maximálny počet farieb 256. (Čitateľa môže, ale nemusí zaujímať, na čom sú vlastne takéto obrázky založené, ale každý pixel v obrázku založenom na palete je v skutočnosti jeden bajt, v ktorom je uložený index jedného prvku v palete 256 farieb.)

Všimnite si, že index vrátený pri distribúcii jednej z farieb v obrázku má význam iba pre tento obrázok. Napríklad, ak PHP skript priradí $čiernu k farbe rozloženej na jednom obrázku, potom nemá zmysel používať túto premennú ako farebný vstup do príkazu kreslenia volaného na spracovanie iného obrázka.

Obrázky s realistickými farbami

gd 2.0 a novší tiež poskytuje možnosť vytvárať obrázky, ktoré nie sú založené na paletách, v ktorých každý pixel ukladá ľubovoľné číslo farby RGB. V tomto takzvanom true-color formáte je počet možných farieb extrémne veľký. Nielenže táto funkcia neobmedzene rozširuje rozsah umeleckého vyjadrenia, ale tiež vám umožňuje verne reprodukovať obrázky PNG a JPEG s vernými farbami nahratými do pamäte pomocou súpravy nástrojov gd.

Okrem toho, že na vytvorenie počiatočného obrázka sa používa iná funkcia a neexistujú žiadne obmedzenia na výber rôznych farieb, princípy práce s obrázkami v skutočných farbách sú podobné ako pri obrázkoch na palete.

Najmä stále môžete volať ImageColorAllocate() na vytvorenie nových farieb a priradiť premennej návratovú hodnotu na neskoršie použitie v príkazoch kreslenia. Jediný rozdiel je v tom, že návratovou hodnotou je číslo farby RGB, nie index prvku v palete. Okrem toho v obrázkoch s vernými farbami neexistuje žiadna koncepcia farby pozadia vytvorená ako vedľajší efekt funkcie ImageColorAllocate(); V dôsledku inicializácie je všetkým pixelom priradené označenie čierna (0, 0, 0).

Transparentnosť

Verzie gd 2.x podporujú koncept transparentnosti. Toto používa alfa kanál (okrem hodnôt červenej, zelenej a modrej) na označenie priehľadnosti farby. To napríklad umožňuje, aby sa jeden tvar prekrýval s druhým, takže prvý tvar zostane čiastočne viditeľný, a nie úplne prekrýva druhý.

V PHP má veľa funkcií na prácu s obrázkami analóg obsahujúci v názve slovo „alfa“, čo znamená, že v týchto funkciách je farba reprezentovaná štyrmi hodnotami (R, G, B, A). Napríklad funkcia imageColorAllocate() má tri parametre a pri volaní funkcie ImageColorAllocateAlpha() musíte zadať štvrtý parameter s hodnotou medzi 0 a 127. Hodnota nula znamená, že farba je úplne nepriehľadná a hodnota 127 znamená, že farba je úplne nepriehľadná

Súradnice a príkazy na kreslenie

Po vytvorení obrázka pomocou súpravy nástrojov gd sa implicitne vytvorí súradnicový systém, ktorý vám umožní zadať v ňom príkazy na kreslenie. Limitné hodnoty súradníc v tomto systéme sú určené špecifikovanými parametrami šírky a výšky obrazu.

Počiatok súradníc v tomto systéme, zodpovedajúci súradniciam (0, 0), sa nachádza v ľavom hornom rohu obrázka. Kladný smer pre hodnoty X je zľava doprava a pre hodnoty Y je to zhora nadol. (V súradnicových systémoch počítačovej grafiky je toto umiestnenie počiatku bežné, ale zdá sa, že tí, ktorí študovali analytickú geometriu, sú zvyknutí, že počiatok je v ľavom dolnom rohu diagramu.)

Počet príkazov na kreslenie je veľmi veľký. Tieto príkazy zahŕňajú, ale nie sú obmedzené na príkazy na kreslenie segmentov čiar, obdĺžnikov a oblúkov, ako aj príkazy na nastavenie špecifických hodnôt pixelov. Majte však na pamäti, že konečným výsledkom všetkých týchto príkazov na kreslenie a vykresľovanie je nastavenie hodnôt pixelov. Po vykonaní príkazov, ktoré menia hodnoty pixelov, nezostane v pamäti žiadna stopa (okrem samotných zmenených hodnôt), takže neexistuje spôsob, ako prepísať príkazy na kreslenie a vykresľovanie alebo prezentovať výsledky rôznych príkazov oddelene.

Nič nebráni príkazom na kreslenie, ktoré presahujú zadaný obrázok, ale takéto kreslenie nemá žiadny viditeľný efekt. Napríklad obdĺžnik nebude na obrázku viditeľný, ak sú všetky hodnoty súradníc záporné.

Konverzia formátu

Všetky operácie kreslenia a manipulácie s obrázkami sa vykonávajú na obrázku reprezentovanom vo vnútornom formáte gd. A po dokončení týchto operácií môže skript zavolať jeden z príkazov na konverziu a výstup (imagepng, imagetjpeg atď.), aby previedol tento obrázok do požadovaného grafického formátu a vydal ho do okna prehliadača používateľa (alebo do súboru).

Uvoľnenie zdrojov

Po prenesení výsledku konverzie dokončeného gd obrázku k používateľovi môžeme považovať prácu s internou verziou za ukončenú. To znamená, že táto verzia musí byť zničená. Správny spôsob, ako to urobiť, je zavolať imagedestroy() s obrázkom ako parametrom.

funkcie knižnice gd

V tomto článku nebudeme samostatne uvádzať a popisovať všetky funkcie poskytované v rozhraní gd interpreta PHP. Aby ste sa oboznámili s týmito informáciami, odporúčame použiť časť „Spracovanie a generovanie obrazu“ v príručke php.net. Väčšina funkcií gd patrí do jednej z kategórií uvedených v tabuľke nižšie. Všimnite si, že názvy funkcií uvedené v tejto tabuľke sú veľké, aby sa prvé písmeno každého slova lepšie čítalo, ale táto podmienka nie je vždy dodržaná v príkladoch kódu, pretože názvy funkcií PHP nerozlišujú veľké a malé písmená:

Klasifikácia funkcií gd Typ Príklad Poznámka
Funkcie na vytváranie obrázkov ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Vráti nový obrázok gd. Funkcia ImageCreate() berie ako parametre šírku a výšku obrázka a parametre ostatných funkcií sú cesta k súboru, adresa URL alebo reťazec obsahujúci predtým vytvorený obrázok, ktorý by sa mal načítať a previesť do formátu gd.
Funkcie, ktoré vykonávajú operácie rozloženia farieb ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() Funkcia ImageColorAllocate() berie ako parametre rukoväť obrázka a požadované hodnoty červenej, zelenej a modrej a potom vracia číslo farby na neskoršie použitie pri operáciách kreslenia a vykresľovania. Funkcia ImageColorAllocateAlpha akceptuje ďalší parameter - koeficient priehľadnosti (0-127)
Funkcie, ktoré vykonávajú operácie zhody farieb ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Vráti index zodpovedajúcej farby v palete obrázka. Funkcie obsahujúce slovo „Najbližšie“ vo svojom názve vrátia farbu, ktorá sa najviac približuje (presnosť zhody sa meria ako vzdialenosť medzi bodmi v priestore hodnôt RGB); funkcie s označením "Presná" vracajú číslo farby, len ak je totožné s hľadanou, inak vracajú hodnotu -1, funkcie s názvom "Alfa" pracujú s farbami, ktoré sa určujú pomocou štyroch hodnôt (s transparentné farby)
Funkcie kreslenia čiar ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Používajú sa na kreslenie priamych segmentov alebo kriviek určeného tvaru. Prvým parametrom každej z týchto funkcií je zvyčajne obrázok, posledným parametrom je farba a medziľahlými parametrami sú súradnice X a Y.
Nastavenia pera na kreslenie čiar ImageSetStyle(), ImageSetThickness() Zmeňte nastavenia, ktoré ovplyvňujú charakteristiky čiar vytvorených následnými príkazmi na kreslenie čiar (niektoré z týchto funkcií sú použiteľné len pre gd 2.0.1 alebo novšie verzie)
Funkcie kreslenia a plnenia ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Spravidla sú podobné zodpovedajúcim funkciám na kreslenie čiar, ale poskytujú nielen kreslenie obrysov plôch, ale aj vypĺňanie vytvorených plôch farbou. Špeciálna funkcia ImageFill() vykoná operáciu výplne pomocou špecifikovanej farby výplne. Vypĺňanie sa vykonáva vo všetkých smeroch od zadaných súradníc XY (niektoré z týchto funkcií vyžadujú gd 2.0.1 alebo novší)
Funkcie pre prácu s textom ImageString(), ImageLoadFont() Funkcia ImageString berie ako parametre rukoväť obrázka, číslo písma, súradnice X a Y, textový reťazec a farbu. Ak je číslo fontu medzi 1 a 5, potom sa na zobrazenie riadku v tejto farbe použije jeden z piatich vstavaných fontov. Na druhej strane, číslo písma väčšie ako 5 označuje výsledok načítania špecializovaného písma pomocou funkcie ImageLoadFont()
Exportovať funkcie ImagePng(), ImageJpeg() Skonvertujte interný obrázok gd na obrázok vhodného formátu a potom tento obrázok pošlite do výstupného toku. Ak je zadaný iba jeden parameter (správca obrázka), obrázok sa používateľovi odošle a ak sa použije ďalší parameter, ktorým je cesta k súboru, cieľom výstupného toku sa stane súbor.
Funkcia zničenia obrazu ImageDestroy() Vezme rukoväť obrázka ako parameter a uvoľní všetky prostriedky spojené s obrázkom
Podpora obrázkov HTTP

Aby sa obrázok správne zobrazil v prehliadači používateľa, je potrebné špecifikovať, odkiaľ má obrázok pochádzať a aký je jeho formát. Preto bohužiaľ nie je možné jednoducho implementovať napríklad volanie funkcie imageToPng() do vygenerovaného HTML súboru a tým vyriešiť problém so zobrazením obrázku. V podstate musíte preložiť výstupný kód obrázka s kódom HTML vygenerovaným v skripte PHP a na to môžete použiť jednu z troch možností popísaných nižšie.

Vytváranie obrázkov na celú stranu

Celá vygenerovaná stránka môže byť naformátovaná ako obrázok. V tomto prípade musíte pred dáta obrázka vložiť hlavičku HTTP, čím vyhlásite, že to, čo nasleduje, je obrázok určitého typu. Na konci skriptu môžu byť napríklad uvedené nasledujúce riadky:

// ... kód, ktorý vytvorí obrázok a priradí ho // k premennej $image header("Content-type: image/png"); // Zobrazenie názvu v prehliadači imagepng($image); // Odovzdať údaje samotného obrázku prevedené do formátu PNG imagedestroy($image); // Uvoľnite zdroje

Výhodou tohto prístupu je, že akékoľvek informácie, vrátane parametrov POST, môžu byť použité na sprostredkovanie pokynov o kompozícii budúceho obrázka. Nevýhodou je, že výsledná stránka nemôže obsahovať žiadny bežný HTML kód. V skutočnosti si dokonca musíte dávať pozor, aby ste vo svojich skriptoch neposlali žiadny textový výstup pred názvom a obrázkom, pretože to znamená predčasné odoslanie obsahu. V tomto prípade sa zobrazí chybové hlásenie „Hlavičky sú už odoslané...“.

Vkladanie obrázkov uložených v súboroch

Najprv si všimnite, že HTML podporuje deskriptor , ktorá vám umožňuje vložiť obrázok zadaním cesty k súboru obrázka alebo adresy URL, ako v nasledujúcom príklade:

Tento dizajn sa vzťahuje na súbory so statickými obrázkami, ale nie je dôvod, prečo by nemohol povoliť vkladanie novovytvoreného obrázka. Preto môžete pripraviť skript, v ktorom sa najskôr vytvorí obrázok, potom sa údaje obrázka zapíšu do lokálneho súboru a potom sa vygeneruje kód HTML s príslušným deskriptorom , ukazujúc na novovytvorený súbor.

Jedinou nevýhodou tohto prístupu je to, že po prvé, proces vytvárania stránky musí zahŕňať zápisy do súborov, čo môže byť časovo náročné, a po druhé, musíte určiť, čo so súbormi robiť, keď ich skončíte.

Ale v určitej situácii je tento prístup ideálny. Ide o vytváranie a ukladanie obrázkov do vyrovnávacej pamäte, ktoré predstavujú konečný súbor možností. V tomto prípade existuje špecifický spôsob, ako priradiť konkrétnu situáciu k názvu súboru obrázka. Keď nastanú niektoré z týchto situácií, ktoré si vyžadujú výstup obrázka, skontroluje sa, či príslušný súbor už existuje. Ak je odpoveď kladná, jednoducho sa použije odkaz na tento súbor vo formáte deskriptora a ak je odpoveď nie, potom sa vytvorí obrázok, zapíše sa do súboru a potom sa znova použije odkaz na tento obrázok. V konečnom dôsledku vytváranie nových súborov jednoducho nebude potrebné.

Vkladanie obrázkov generovaných v skriptoch

Nakoniec neexistuje dôvod, prečo by ste nemohli poskytnúť samostatný skript obrázka a potom vložiť výsledný obrázok na dynamickú stránku vygenerovanú iným skriptom zadaním v deskriptore URL tohto skriptu. Jediným problémom je výber spôsobu prenosu potrebných údajov na závislú stránku. Napríklad rukoväť označujúca vložený obrázok môže vyzerať takto:

V tomto prípade skript ballpage.php vráti PNG obrázky farebných loptičiek umiestnených na rôznych pozíciách na obrázku.

Použitie tohto prístupu však môže spôsobiť problémy, pretože webové servery a prehliadače niekedy kontrolujú prípony spracovávaných súborov a keď dostanú výsledky kontroly, reagujú na ne inak. Napríklad skript vykresľovania ballpage môže vyžadovať príponu .php, aby server Apache mohol určiť, že kód servera by sa mal interpretovať ako kód PHP (hoci požadovaný režim spracovania možno zadať aj prostredníctvom konfiguračných súborov).

Existujú však aj neštandardné verzie prehliadačov, ktoré neberú do úvahy možnosť, že súbor s príponou .php vytvorí obrázok, aj keď odovzdaná hlavička naznačuje, že nasleduje obrázok. Preto pri použití tejto metódy musíte otestovať skripty v rôznych prehliadačoch a uistiť sa, že zamýšľaný okruh používateľov dostane stránky vo vami zamýšľanej forme.

Nižšie sú uvedené príklady použitia knižnice gd na vytváranie obrázkov.

Príklad použitia knižnice gd: vytváranie jednoduchých tvarov

V nasledujúcom príklade si ukážeme, ako použiť knižnicu gd na vytvorenie výkresu obsahujúceho jednoduché geometrické tvary:

Nahraďte nastavenia svojimi vlastnými a uložte tento súbor pod názvom connect-to-database.php do priečinka fcdemo.

Vložíme náhodné údaje

Ak by to bol skutočný projekt, tabuľka používateľov by sa časom zväčšila, ale kvôli demonštrácii musíme vložiť nejaké údaje. Napíšeme si malý skript, ktorý do tabuľky vloží náhodné údaje. Nerobte si starosti, ak nerozumiete nasledujúcemu kódu – pre tento návod to nie je dôležité.

Uložte tento súbor s názvom create-random-data.php do toho istého priečinka.

Najprv zahrnieme súbor pripojenia k databáze. Potom nastavíme časový rámec, z ktorého sa náhodne vyberie čas na registráciu používateľa. Môžete zmeniť počet riadkov, ktoré sa majú vložiť. Ak to chcete urobiť, musíte upraviť premennú $RecordsToInsert.

Následne spustíme skript na vloženie vygenerovaných záznamov do databázy. Ak chcete spustiť tento proces, prejdite na túto adresu - http://localhost/fcdemo/generate-random-data.php.

Nakoniec by ste mali vidieť správu: „Vložené ($RecordsToInsert) záznamy“

Krok 2. Pripravte kostru webovej stránky

Potrebujeme vytvoriť veľmi jednoduchú stránku na zobrazenie nášho grafu. Niečo také:

FusionCharts v3.2 – LinkedCharts PHP Demo