itthon / Dolgozzon az interneten / Példák grafikákra php-ban. Hozzon létre interaktív diagramokat PHP-ben és FusionChartsban. PHP kód fejlesztése

Példák grafikákra php-ban. Hozzon létre interaktív diagramokat PHP-ben és FusionChartsban. PHP kód fejlesztése


Tudod öregem, rég nem láttam ilyet. Még úgy tűnt, hogy az animét le kell kötni. Az öregség észrevétlenül kúszott felfelé, és ezek a lövöldözős kardos fiúk és az élénk hajú lányok egy folytonos ragadós masszává olvadtak össze. Kezdett úgy tűnni, hogy az összes szereplő csak hülyén, csak hangosan és csak az örökkévalóságról beszél. És minden pezseg a mecha-fantasy fiatalos őrültségtől, hú! .. És mennyire örülök, hogy megtaláltam a "Színházat...". Hogy néz ki? Be, ahogy megszoktuk őt látni – nem túl sokat. Vagyis rajzolni valamit – igen, persze. Hangulat szempontjából pedig jobban „húz” a „”, valószínűleg. Vagy a régi grúz kisfilmekre (emlékszel még?), amelyek „inkább életszerűek”. A legkülönfélébb emberek, fiatalok és épp ellenkezőleg, beszélgetnek, élnek, ismerkednek, dolgoznak... Persze a cselekményhez valamilyen kulcsfontosságú momentum kerül, nem a legrutinosabb. De milyen jó, hogy ez a nagyon kulcsfontosságú pillanat nem az első csók és nem a misztikus erő megszerzése, hanem például egy osztálytársak találkozása sok év múlva, vagy egy jól fizetett állásból való elbocsátás, vagy az anyával való ismerkedés. gyalogsági lézerfegyver. „Van élet 30 után?” Igen? Szeretem azt hinni, hogy van. És tetszik, hogy Rumiko Takahashi is így gondolja.

Ne sikíts, cica, nem fogok sokáig. Már ellenőrzöm. És általában mit jelent a „számítógépem” ?! És hol van akkor az enyém? .. Elvégre nekem is néha meg kell néznem egy-két animét. Nézze, mindent feltöltött "" és "" ... Megkérdezhetem egyszer az életben nyugodtan?! mit nézek? Rumiko Takahashi Színház, ott dobozok vannak... Mi a fenéért, nyuszi? Először is, ez nem szemét, csak 2003, másodszor: "" tetszik, "" örömmel olvassa - a mangaka ugyanaz, de nem itatod el a készségedet, pinty. Takahashi-san nagyon jól tud rajzolni és intrikálni... Miért ilyen rövid akkor a sorozat? És ez nem sorozat, ez egy kisfilmsorozat - különálló cselekményekkel, különböző karakterekkel. Vicces vagy könnyes? És azok, meg azok – látod, oda van írva: „dráma”, „vígjáték”, „mindennapi élet”... Nem szereted a „mindennapokat”? Ne beszélj így, kis felső, különben ő sem fog szeretni. A jó napi rutin nagyszerű dolog! Hadd mutassam meg, hogyan rejtettek el egy pingvint a szomszédok elől egy japán Hruscsovban. Seriyushka anyának, mint gyerekkoromban, és megyek vacsorát főzni, oké? ..

Csak sírtam, a fenébe is! Nem gondoltam volna, hogy ilyen dolgokba fogok tudni belemenni! És vicces, istenem, vicces, főleg egy öregasszonyról, aki visszaesett a kómából, és azt keresi, miért keltették vissza az életbe. És ez az őskori szerelmi története más szemmel: hogyan mesél magáról, és hogyan - alanya; amit úgy hívnak, hogy „érezd a különbséget!”. És a happy-end az öregasszony lábán törik, én csak a párnát rágtam a gyengédségtől!.. És az epizód a nászpalotáról! Annyira szeretem az igazi romantikus történeteket, nem amikor minden fénylik az elbűvölő csiszolástól, hanem amikor igazán együtt tudsz érezni egy élő emberrel. És az idősödő férjről és feleségről, ezek a sajnálkozások olyan jól átadhatók, ezek a kísérletek, hogy megragadják a fiatalságot a megfoghatatlan és már rühes farokkal... és minden olyan bölcsen és jól végződik. Még arra is gondoltam: talán az őseim sem teljesen közömbösek egymás iránt, de egyszerűen elfelejtették, hogyan kell ezt megmutatni a korral ...

Este nézem a sorozatot. Lassan. Nagyon különbözőek, nem akarod összekeverni őket. Mintha különböző helyekre látogatna el. És teljesen más a hangulat, és a benyomások. Nem. Valószínűleg nem fog tetszeni. Mert semmi divatos. ÉS szürreális Azonos. És még a "pszichologizmus" is - "nehéz gyerekkor, vitaminhiány, időben vett volna egy gameboyt, a köcsögökből, ugye, nem lett volna mániákus gyilkos" - nem. És semmi különösebben tanulságos. Az ilyen dolgok alapvetően nem tanítanak semmit. Mire taníthat valaki más élete? Csak mert ő is ott van. Megpróbálhatsz ezzel számolni... Pátosz és magas hangok nélkül. Ez nem is dráma, tudod? Ahogy Carlson mondta: "apróságok, az élet kérdése!". Ezek mind az élet dolgai. Spontán. Olyan gyakran vádolnak velünk együttérzést hivatásos gyilkosok és mindenféle más özvegymesterek iránt, hogy egy hivatalnokkal vagy háziasszonyokkal együtt érezni, ez valami rossz modor... igen, nem olvasok erkölcsöt, vedd le . Te kérdezted – válaszoltam. Gyere, mesélj az új termékeidről. Majd elviszem, ha vége lesz a „Színháznak...”. Olyan, mint a bor, nem lehet lenyelni. Az árnyalatok nem érnek el, vagy az utóíz elkenődik. Az kínos lenne...

A webes forgatókönyvek grafikus létrehozási eszközeinek hatókörének meghatározásához vegye figyelembe a következő sorozatot lehetőségek grafika használat:

  • A saját maga által készített vagy valahonnan kölcsönzött statikus képek beágyazhatók egy HTML oldalra.
  • Programozottan generált képek (HTML + CSS) használhatók.
  • A gd könyvtár segítségével előre létrehozhat statikus grafikus képeket a szkript végrehajtása során felmerülő összes helyzetre, elmentheti fájlokban és feltételenként megjelenítheti azokat.

A statikus képekkel való grafika megvalósításának lehetőségét annak egyszerűsége miatt nem vesszük figyelembe, ezért először egy egyszerű lehetőséget (HTML + CSS grafika), majd a gd könyvtár használatát fontoljuk meg PHP-ben.

HTML + CSS grafika

A weboldal látogatói jól ismerik a színes oldalakkal ellátott vízszintes oszlopdiagramokat, amelyek különösen gyakoriak a felmérési eredmények illusztrálásakor. Első pillantásra az embernek az a benyomása, hogy valamilyen grafikus segédeszközök, de a valóságban elég néhány egyszerű szkriptet használni:

Grafika használata PHP-ben, HTML-ben, CSS-ben /* A megjelenést alakító CSS-stílusok */ body div ( magasság: 1em; megjelenítés: inline-block; függőleges igazítás: középen ) span (megjelenítés: inline-block; szélesség: 120 képpont) .narancs ( háttér: narancs ) .alma ( háttér: #33CC66 ) .banán ( háttér: sárga ) .paradicsom ( háttér: piros ) .uborka ( háttér: zöld ) .burgonya ( háttér: szürke ) Megrendelési űrlap Gyümölcs Narancs Alma Banán Zöldség Paradicsom Uborka Burgonya

Ez a példa nem mutatja be a PHP új funkcióit, hanem egyszerűen egy egyszerű módszert mutat be grafikák létrehozására HTML és CSS használatával (jelen esetben oszlopdiagramok):

gd könyvtár

Az előző részben ismertetett grafikus eszközök szinte kimerítik a szabványos HTML kód lehetőségeit (bár érdemes megjegyezni, hogy a nagy teljesítményű HTML5 Canvas grafikus generátorra nem tértünk ki). Most folytassuk a valóban tetszőleges grafika létrehozásának módszereit a gd könyvtár használatával.

A gd könyvtár általános leírása

Általánosságban elmondható, hogy a készlet eszközöket A gd egy C kódkönyvtár képek létrehozására és manipulálására. Ezt a könyvtárat eredetileg a Boutell.com tehetséges és nagylelkű emberei fejlesztették ki és tették elérhetővé a nyilvánosság számára.

Maga a gd könyvtár nem grafikus program vagy rajzprogram, és nem önálló alkalmazás ill GUI felhasználó. Ehelyett a gd könyvtár olyan függvényeket biztosít, amelyeket bármely program meghívhat a kívánt képkezelés végrehajtására. Ez azt jelenti, hogy bármely C program, amelynek használnia kell a gd könyvtár kódját, összekapcsolható a gd könyvtárral. Pontosan ezt a problémát oldották meg a PHP rendszer fejlesztői.

Valójában egy sor interfész függvényt írtak erre a célra, ami megkönnyíti a gd rutinok meghívását egy PHP szkriptből. De maga a gd könyvtár nem tartalmaz PHP-specifikus kódot, és olyan felületeket fejlesztettek ki, amelyek lehetővé teszik a könyvtár elérését számos más programozási nyelvből és környezetből, beleértve a Perl, Pascal, Haskell és REXX alkalmazásokat.

A gd könyvtár lehetővé teszi a függvények meghívását forrásképek létrehozásához (kezdetben üresek, üres papírlapra hasonlítóak), rajzolást és rajzolást ezekbe a forrásképekbe különböző módokonés végül konvertálja a képet a gd belső képformátumáról egy szabványos képformátumra, majd elküldi a végső rendeltetési helyére (kimenet a böngészőablakba, vagy mentés egy fájlba vagy adatbázisba). És mivel mindezeket a műveleteket a program irányítása alatt hajtják végre, és nem kézzel hajtják végre, a létrehozott képek tetszőlegesen bonyolulttá válhatnak, és a program során bármilyen helyzettől függhetnek, amelyet kívánatos függővé tenni.

Képformátumok

A gd könyvtár alapvetően lehetővé teszi a képek importálását és exportálását sokféle formátum használatával. A legnépszerűbb képformátumok a GIF, JPEG és PNG, bár ezek közül a formátumok közül leginkább az utóbbit használjuk példáinkban.

A GIF és PNG formátumok a képpontoknak megfelelő színes elemek rácsának leírására szolgálnak, néhány kiegészítéssel. Az első kiegészítés az, hogy a cellák tényleges színszámokat vagy indexeket tartalmazhatnak egy színszámtáblázatban. (Az első opció kifejezőbb képeket hoz létre, mert tetszőleges számú különböző színt tesz lehetővé, míg az utolsó opció kompaktabb képeket hoz létre.)

A második kiegészítés a következő. Természetesen a GIF és PNG formátum fogalmi ábrázolása meglehetősen egyszerű, de a gyakorlatban a képek olvasása, írása és átvitele ezekben a formátumokban mindig tömörített formában történik. A tömörítésre azért van szükség, mert nagy mennyiségű memória szükséges a cellarácsként ábrázolt adatok tárolásához. Egy egyszerű, 500x400 pixeles képen 200 000 pixel van, és ha minden képpont három bájtot igényel, akkor a memóriaigény már több mint fél megabájt.

A tömörítés témája hatalmas és összetett, de a legtöbb tömörítési algoritmus a képredundancia csökkentésére támaszkodik a képméret csökkentése érdekében. (Például kevesebb memóriaterületet igényelne annak megadása, hogy a képen minden pixel zöld legyen, mintha minden pixelhez külön-külön zöld értéket adnánk meg.) Olyan összetett problémák, hogy a tömörítési algoritmusban megvalósított problémák megoldási módszerei GIF formátumú képeket generálnak, sőt szabadalmaztatták őket.

Könyvtár telepítés

Őszintén szólva a gd könyvtár telepítése és sikeres működése PHP rendszerrel együtt meglehetősen nehéz feladat. Ez nem hiányosságoknak köszönhető. szoftver PHP vagy gd, de teljes mértékben konfigurációs problémák határozzák meg; különösen meg kell értened, hol kell és hol vannak a gd könyvtáraknak, és meg kell győződni arról, hogy az összes végrehajtható fájl fordítási és összekapcsolási lépései megfelelően megtörténtek. Ezért a lehető legjobb helyzet az, amikor a felhasználó azt tapasztalja, hogy a gd könyvtár már telepítve van, és a gd támogatás már engedélyezve van a PHP rendszerben (akár a webtárhely cég jóvoltából, akár azért, mert a könyvtár benne van a telepített PHP rendszerben).

Ezért a gd könyvtár telepítését a nulla lépéstől kell kezdeni, ellenőrizve, hogy a gd könyvtár már telepítve van-e. Először írja be a következő kódot a szkriptfájljába, és tekintse meg a böngészőben való futtatásának eredményét, függetlenül attól, hogy szkriptjeit webtárhely-szolgáltató támogatja-e, vagy teljesen a saját telepítése:

Ennek az oldalnak a képernyőn való megjelenítése után elég rákeresni a "gd" szövegre a böngészőablakban. Ennek eredményeként egy alszakasz lesz, amely leírja, hogy a PHP telepítése milyen mértékben támogatja a gd könyvtárat. Ha csak bizonyos típusú képeket kíván készíteni (pl PNG formátum), és a phpinfo() függvény eredményei azt jelzik, hogy az ilyen típusú képek képtámogatása engedélyezett, azonnal kezdheti. És ha a gd verzió adatai tartalmazzák a "bundled" szót, akkor a PHP-hez tartozó gd könyvtár kerül felhasználásra.

Ha a gd könyvtár említésének megkeresése sikertelen, és Ön maga végzi el a PHP telepítését, telepítheti és beállíthatja a gd könyvtárat. (Ha viszont az Ön hosting cége kezeli a PHP telepítését, akkor mindössze annyit kell tennie, hogy megkéri a céget, hogy nyújtson támogatást a gd könyvtárhoz, vagy másik webtárhely céget kell használnia.)

A PHP-hez mellékelt gd könyvtár használata sok problémát kiküszöböl a gd telepítésével, de nem minden. A tény az, hogy magának a disztribúciós csomagnak a verzióját használva megkaphatja a gd könyvtárat, de nem feltétlenül az összes, a gd működéséhez szükséges könyvtárat. Maga a gd könyvtár számos más könyvtártól függ: libpng (a PNG-képek manipulálásához), zlib (tömörítéshez) és jpeg-6b vagy újabb (PNG-képek kezeléséhez). JPEG képek, ha szükséges). A megadott könyvtárak már sok Linux-telepítésben megtalálhatók, ebben az esetben elegendő lehet a szükséges with opciót (például --with-zlib) a paraméterek közé tenni a telepítési könyvtár megadása nélkül. Ha saját kezűleg végzi el a PHP beállítását, elegendő a --with-gd paraméter hozzáadása ahhoz, hogy a gd csomagban lévő verziója szerepeljen a végrehajtható fájlban. Ha pedig egy másik verzióra szeretne mutatni, használja inkább a --with-gd=path beállítást.

Ha egy vagy több hiányzót talál szükséges könyvtárak, ez azt jelenti, hogy ezeket a könyvtárakat külön kell előállítani. Információért, hogy hol találja meg aktuális verziók, kezdheti a www.libgd.org webhelyen található dokumentáció áttekintésével.

A gd könyvtárral való munka alapelvei

Amikor egy képet létrehozunk vagy manipulálunk a gd eszközkészlettel, a kép speciális gd formátumú, amely nem felel meg egyetlen általános képtípusnak sem. Elméletileg lehetséges a képek exportálása ebben a gd formátumban, de ilyen műveletet ritkán alkalmaznak, mivel az eredményül kapott kép nincs tömörítve, és nem jeleníthető meg böngészőben vagy egyszerű grafikus programban.

A gd eszközkészlettel feldolgozott képet az összes pixel szélességére, magasságára és színére vonatkozó információk jellemzik, amelyek száma megegyezik a szélesség és magasság szorzatával. Egy program általában úgy kezdi meg a gd könyvtárral való interakcióját, hogy létrehoz egy új üres képet (amelyre rajzolhat és rajzolhat), vagy egy képet importál egy fájlból. A következő lépések általában a következő lépésekben zajlanak: egyrészt a színek eloszlása ​​a képen, másodsorban a kép rajzolása és festése vagy manipulálása valamilyen más művelettel, harmadrészt a kép átalakítása egy általános formátumba (például PNG ill. JPEG ), és vigye át a célhelyre.

Színek ábrázolása

Kétféleképpen lehet színeket ábrázolni a gd képekben: paletta alapú megjelenítés, amely 256 színre korlátozódik, és valósághű színmegjelenítés, amely lehetővé teszi tetszőleges összeg különböző RBG színszámok. A gd 1.x-ben az egyetlen lehetőség a paletta színek használata volt, de a gd 2.x könyvtárban és annak PHP-val szállított verziójában a paletta és a valósághű színes képek létrehozása is támogatott. Vegye figyelembe, hogy minden egyes gd képnek vagy paletta alapúnak vagy színhűnek (RGB) kell lennie; ez azt jelenti, hogy nincs mód valósághű színek beszúrására a paletta képekbe.

Az ImageCreate() függvényt meg kell hívni, hogy megkapjuk a kezdeti paletta alapú üres képet, az ImageCreateTrueColor() függvényt pedig a kép valósághű színekben való megjelenítéséhez.

Paletta alapú képek

A színek piros-zöld-kék (RGB) formátumban vannak megadva, három számmal 0-tól 255-ig. Például a számok (255, 0, 0) által meghatározott szín élénkpiros, a szín ( 0, 255, 0) zöld, szín (0, 0, 255) kék, szín (0, 0, 0) fekete, színes (255, 255, 255) fehér és színes (127, 127, 127) - szürke. Egyre több új szín létrehozásával tetszőlegesen választhatja ki a három színösszetevő értékét.

Bármilyen képre való festést egy adott színnel kell elkészíteni, és a színeket használat előtt el kell osztani a képen. Ezenkívül a képen elosztott első szín automatikusan háttérszín lesz. Tehát semmi esetre sem gondolhatja, hogy megteheti a színek megadása nélkül, és általában a színek elosztása lesz az első művelet egy új üres kép létrehozása után.

A palettázott képek színei az imagecolorallocate() függvény segítségével jönnek létre, amely paraméterként egy (korábban létrehozott) képet és három egész számot vesz fel, amelyek megadják a vörös, zöld és kék százalékos arányát. A visszatérési érték egy egész szám, amely megadja az új szín indexét a kép belső palettáján. Ezt a visszatérési értéket hozzá kell rendelni egy változóhoz, mert a megadott indexérték szükséges minden jövőbeni művelethez, amelyet az adott szín használatával kell végrehajtani.

A paletta alapú képek maximum 256 színűek lehetnek. (Az olvasót érdekelheti, de lehet, hogy nem érdekli az ilyen képek valójában, de a paletta alapú kép minden pixele egy bájt, amely egy bájt indexét tárolja. elem a 256 színből álló palettán.)

Ne feledje, hogy a színek valamelyikének elosztása során visszaadott index csak az adott képre vonatkozik. Például, ha egy PHP-szkriptben a $black változóhoz egy képben elosztott szín van hozzárendelve, akkor nincs értelme ezt a változót színbemenetként használni egy másik kép feldolgozására hívott rajzparancshoz.

Képek valósághű színekkel

A gd 2.0 és újabb könyvtár lehetővé teszi nem palettázott képek létrehozását is, amelyekben minden pixel tetszőleges számot tárol RGB színek. Ebben az úgynevezett valósághű színformátumban a lehetséges színek száma rendkívül nagy. Ez a funkció nemcsak a művészi kifejezés határait tágítja ki, hanem lehetővé teszi a PNG és JPEG képek hű reprodukálását a memóriába betöltött valósághű színekkel a gd eszközkészlet segítségével.

Eltekintve attól, hogy az eredeti kép létrehozásához más funkciót használnak, és nincs korlátozás a különböző színek kiválasztására, a valósághű színű képekkel való munka elvei hasonlóak a paletta alapú képekhez.

Különösen továbbra is meghívhatja az ImageColorAllocate() függvényt, hogy új színeket hozzon létre, és a visszatérési értéket egy változóra állítsa a későbbi rajzparancsokban való felhasználáshoz. Az egyetlen különbség az, hogy a visszaadott érték az RGB színszám, nem pedig a palettán lévő elem indexe. Emellett a valósághű színes képeken nem szerepel az ImageColorAllocate() függvény mellékhatásaként létrehozott háttérszín fogalma; az inicializálás eredményeként minden pixel fekete jelölést kap (0, 0, 0).

Átláthatóság

A gd 2.x verziói támogatják az átláthatóság koncepcióját. Ez egy alfa-csatornát használ (a piros, zöld és kék értékek mellett), amely jelzi, hogy mennyire átlátszó a szín. Ez lehetővé teszi például, hogy az egyik formát a másikra rakják oly módon, hogy az első forma részben látható maradjon, ahelyett, hogy teljesen átfedné a másodikat.

A PHP-ben sok képfüggvénynek van egy megfelelője, amely az "alpha" szót tartalmazza a nevében, ami azt jelzi, hogy ezekben a függvényekben a színt négy érték képviseli (R,G,B,A). Például az imageColorAllocate() függvény három paramétert vesz fel, és az ImageColorAllocateAlpha() függvény meghívásakor meg kell adni egy negyedik paramétert 0 és 127 közötti értékkel. A nulla érték azt jelzi, hogy a szín teljesen átlátszatlan, míg a A 127-es érték azt jelzi, hogy a szín teljesen átlátszó.

Koordináták és rajzolási parancsok

A gd eszközkészlettel készített kép elkészítése után implicit módon egy koordinátarendszer jön létre, amelyen belül rajzi parancsokat állíthatunk be. Ebben a rendszerben meghatározzák a koordináták határértékeit adott paramétereket kép szélessége és magassága.

Ebben a rendszerben a koordináták origója, amely megfelel a koordinátáknak (0, 0), a kép bal felső sarkában található. Az X értékek pozitív iránya balról jobbra, az Y értékeknél pedig fentről lefelé. (Koordinátarendszerekben számítógépes grafika az origónak ez a helye gyakori, de akik analitikus geometriát tanultak, úgy tűnik, megszokták, hogy az origó a diagram bal alsó sarkában található.)

A rajzolási parancsok száma nagyon nagy. Ezek a parancsok többek között a vonalszegmensek, téglalapok és ívek rajzolására szolgáló parancsokat, valamint adott pixelértékek beállítására szolgáló parancsokat foglalják magukban. De ne feledje, hogy ezeknek a rajzolási és rajzolási parancsoknak a végeredménye a pixelértékek hozzárendelése. A pixelértékeket módosító parancsok végrehajtása után nem marad nyom a memóriában (kivéve magukat a megváltozott értékeket), így nincs mód a rajzolási és rajzolási parancsok hatásának megszüntetésére, illetve a különböző parancsok eredményeinek külön-külön történő bemutatására.

Semmi sem akadályozza meg az ezen túlmutató rajzparancsok használatát megadott kép, de ennek a rajznak nincs látható hatása. Például a képen nem látható egy téglalap, amelynek minden koordinátája negatív.

Formátum konvertálás

Minden rajzolási és képkezelési művelet a gd belső formátumában megjelenített képen történik. És miután ezek a műveletek befejeződtek, a konverziós és kimeneti parancsok egyike (imagepng, imagetjpeg stb.) meghívható a szkriptben, hogy ezt a képet a szükségessé alakítsa. grafikus formátumés kiadja a felhasználó böngészőablakába (vagy egy fájlba).

Erőforrások felszabadítása

Miután a kész gd kép átalakítási eredménye átkerült a felhasználóhoz, úgy tekinthetjük, hogy a belső verzióval végzett munka befejeződött. Ez azt jelenti ezt a verziót meg kell semmisíteni. A helyes út egy ilyen művelet végrehajtása abból áll, hogy meghívjuk az imagedestroy() függvényt egy képpel mint paraméterrel.

gd könyvtár függvényei

Ebben a cikkben nem fogjuk külön felsorolni és leírni a PHP értelmező gd felületén biztosított összes funkciót. Ezen információk megismeréséhez javasoljuk, hogy használja a php.net kézikönyv "Képfeldolgozás és -generálás" részét. A legtöbb gd függvény az alábbi táblázatban látható kategóriák valamelyikébe tartozik. Vegye figyelembe, hogy az ebben a táblázatban felsorolt ​​függvénynevekben minden szó első betűje nagybetűvel szerepel az olvashatóság érdekében, de ez nem mindig így van a kódpéldákban, mert a nevek PHP függvények kis- és nagybetű nem érzékeny:

A gd függvények osztályozása Típus példa Megjegyzés
Képalkotási funkciók ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Új kép visszaküldése gd. Az ImageCreate() függvény a kép szélességét és magasságát veszi paraméterként, míg a többi függvény paramétere egy fájl elérési útja, URL-je vagy egy korábban létrehozott képet tartalmazó karakterlánc, amelyet betölthet és konvertálhat gd formátumba.
Színelosztási műveleteket végrehajtó funkciók ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() Az ImageColorAllocate() függvény egy képleírót, valamint a kívánt piros, zöld és kék színértékeket veszi paraméterként, majd visszaad egy színszámot, amelyet később a rajzolási és rajzolási műveletekben használnak fel. Az ImageColorAllocateAlpha függvény egy további paramétert vesz fel - az átlátszósági együtthatót (0-127)
Színillesztési műveleteket végrehajtó funkciók ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Visszaadja a palettázott képben szereplő szín indexét. A nevükben a „Legközelebbi” szót tartalmazó függvények a legközelebbi egyező színt adják vissza (az illesztési pontosságot az RGB értéktér pontjai közötti távolságként mérjük); az "Exact" feliratú függvények csak akkor adják vissza a színszámot, ha az megegyezik a keresett színnel, ellenkező esetben -1-et adnak vissza, az "Alfa" címkével ellátott függvények négy értékkel definiált színekkel működnek (átlátszó színekkel).
Vonalrajzolási funkciók ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Meghatározott alakú vonalszakaszok vagy görbék rajzolására szolgál. Általában ezeknek a függvényeknek az első paramétere a kép, az utolsó paraméter a szín, a köztes paraméterek pedig az X és Y koordináták.
Tollbeállítási funkciók vonalak rajzolásához ImageSetStyle(), ImageSetThickness() Módosítsa azokat a beállításokat, amelyek befolyásolják a következő vonalrajzolási parancsokkal létrehozott vonalak jellemzőit (ezek a funkciók csak a gd 2.0.1 vagy újabb verziókra vonatkoznak)
Rajzolási és kitöltési funkciók ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Általában hasonlóak a vonalak rajzolásának megfelelő funkcióihoz, de nem csak a területek kontúrjainak megrajzolására szolgálnak, hanem a létrehozott területek színekkel való kitöltésére is. Az ImageFill() speciális függvény kitöltési műveletet hajt végre a megadott kitöltési szín használatával. A kitöltés minden irányban megtörténik, a megadott XY ponttól kezdve (egyes funkciókhoz gd 2.0.1 vagy újabb szükséges)
Funkciók a szöveggel való munkához ImageString(), ImageLoadFont() Az ImageString függvény paraméterként egy képleírót, egy betűtípus számot, x és y koordinátákat, egy szöveges karakterláncot és egy színt vesz fel. Ha a betűkészlet száma 1 és 5 között van, akkor az öt beépített betűtípus egyike jelenik meg a vonalnak az adott színben. Másrészt az 5-nél nagyobb betűkészletszám az egyéni betűtípus ImageLoadFont() függvény segítségével történő betöltésének eredményét jelzi.
Exportálási funkciók ImagePng(), ImageJpeg() Alakítsa át a gd belső képét a megfelelő formátumú képpé, majd küldje el ezt a képet a kimeneti adatfolyamba. Ha csak egy paraméter (képleíró) van megadva, akkor a kép visszhangzik a felhasználónak, és amikor további paraméter, amely a fájl elérési útja, a kimeneti adatfolyam célállomása a fájl
Képmegsemmisítő funkció ImageDestroy() Képkezelőt vesz paraméterként, és felszabadítja a képpel társított összes erőforrást
HTTP-képátvitel támogatása

Ahhoz, hogy egy kép megfelelően jelenjen meg a felhasználó böngészőjében, meg kell adni, hogy a kép honnan származzon és milyen formátumú. Ezért sajnos nem lehet egyszerűen beinjektálni, például az imageToPng() függvény meghívásával létrehozott fájl HTML-t, és ezzel megoldja a képmegjelenítés problémáját. Lényegében a kép kimeneti kódját a PHP szkriptben generált HTML kóddal kell átlapolni, és ehhez használhatja az alábbiakban ismertetett három lehetőség egyikét.

Teljes oldalas képek készítése

A teljes generált oldal képként bekeretezhető. Ebben az esetben át kell adni egy HTTP-fejlécet, amely megelőzi a képadatokat, és ezzel deklarálni, hogy egy adott típusú kép következik. Például a következő sorok szerepelhetnek a szkript végén:

// ... kód, amely létrehoz egy képet és hozzárendeli a // változóhoz a $image header("Content-type: image/png"); // Cím megjelenítése a böngészőben imagepng($image); // Magának a képnek az adatainak átadása PNG-be konvertálva imagedestroy($image); // Ingyenes források

Ennek a megközelítésnek az az előnye, hogy bármilyen információ, beleértve a POST paramétereket is, felhasználható a jövőbeli kép összetételére vonatkozó utasítások továbbítására. A hátránya pedig az, hogy az eredményül kapott oldal nem tartalmazhat normál HTML kódot. Sőt, még arra is figyelni kell, hogy a szkriptekben ne küldjön semmilyen szövegkimenetet a cím és a kép előtt, mivel ez egyenértékű a tartalom idő előtti elküldésével. Ebben az esetben a „Fejlécek már elküldve...” hibaüzenet jelenik meg.

Fájlokban tárolt képek beágyazása

Először is megjegyezzük, hogy a HTML nyelv fogantyú támogatott , amely lehetővé teszi a kép beágyazását a képfájl elérési útjának vagy URL-címének megadásával, a következő példában látható módon:

Ez a konstrukció statikus képfájlokra vonatkozik, de nincs ok arra, hogy miért ne lehetne használni egy újonnan létrehozott képfájl beillesztésére. Ezért lehet olyan forgatókönyvet készíteni, amelyben először elkészítik a képet, majd a képadatokat egy helyi fájlba írják, majd a megfelelő leíróval generálják a HTML kódot. csak cos-ra mutatva adott fájl.

Ennek a megközelítésnek az egyetlen hátránya, hogy először is bele kell foglalnia a fájlírási műveleteket az oldalkészítési folyamatba, ami hosszú ideig tarthat, másodszor pedig ki kell találnia, mit kell tennie a fájlokkal, amikor azok befejeződtek. .

De bizonyos helyzetekben ez a megközelítés ideális. Ez körülbelül a választási lehetőségek véges halmazát képviselő képek létrehozásáról és gyorsítótárazásáról. Ebben az esetben van egy bizonyos módja annak, hogy egy adott helyzetet képfájlnévvel társítsunk. Ha ezek közül a helyzetek közül néhány előfordul, amely képkimenetet igényel, akkor ellenőrzi, hogy a megfelelő fájl létezik-e már. Pozitív válasz esetén egyszerűen alkalmazza a fájlra mutató hivatkozást, amely leíróként van formázva. , és ha a válasz nemleges, akkor létrejön egy kép, beírja egy fájlba, majd ismét egy hivatkozást alkalmaz erre a képre. Végül egyszerűen nem lesz szükség új fájlok létrehozására.

Szkriptekben generált képek beágyazása

Végül pedig nincs ok arra, hogy miért ne lehetne offline képalkotó szkriptet biztosítani, majd az eredményül kapott képet beágyazni dinamikus oldal egy másik szkript hozta létre, megadva a leíróban A szkript URL-je. Ebben az esetben az egyetlen nehézséget annak kiválasztása jelenti, hogy a szükséges adatokat hogyan továbbítsuk a függő oldalnak. Például egy beágyazott képet jelző leíró így nézhet ki:

Ebben az esetben a ballpage.php szkript a rajz különböző helyein lévő színes golyók PNG-képeit adja vissza.

Ennek a megközelítésnek a használatakor azonban teljesítményproblémák léphetnek fel, mivel a webszerverek és a böngészők időnként ellenőrzik a feldolgozott fájlok utótagjait, és az ellenőrzés eredményének kézhezvétele után különböző módon reagálnak rájuk. Például előfordulhat, hogy a ballpage renderelő szkriptnek .php kiterjesztést kell adni ahhoz, hogy az Apache megállapítsa, hogy az adott szerverkódot PHP-kódként kell értelmezni (bár a szükséges feldolgozási mód konfigurációs fájlokkal is beállítható).

Vannak azonban olyan nem szabványos böngészőverziók, amelyek nem veszik figyelembe annak lehetőségét, hogy egy .php fájl képet generáljon, pedig az átadott fejléc azt jelzi, hogy kép következik. Ezért a megadott metódus használatakor ellenőrizni kell a szkripteket különböző böngészőkés győződjön meg arról, hogy a felhasználók célközönsége az Ön által kívánt módon kapja meg az oldalakat.

Az alábbiakban példák láthatók a gd könyvtár használatára képek létrehozására.

Példa a gd könyvtár használatára: egyszerű alakzatok létrehozása

A következő példában bemutatjuk, hogyan lehet egyszerű geometriai alakzatokat tartalmazó rajzot generálni a gd könyvtár használatával:

Cserélje ki a beállításokat sajátjaira, és mentse ezt a fájlt connect-to-database.php néven az fcdemo mappába.

Véletlenszerű adatok beszúrása

Ha ez egy valós projekt lenne, akkor a felhasználók tábla idővel feltöltődne, de a demonstrációhoz be kell szúrnunk néhány adatot. Írjunk egy kis szkriptet, amely véletlenszerű adatokat szúr be egy táblázatba. Ne aggódjon, ha nem érti a következő kódot – ez nem fontos ebben az oktatóanyagban.

Mentse el ezt a fájlt gener-random-data.php néven ugyanabba a mappába.

Először csatoljuk az adatbázis-kapcsolat fájlját. Ezután beállítjuk azt az időkeretet, amelyből véletlenszerűen kiválasztásra kerül a felhasználói regisztráció időpontja. Módosíthatja a beszúrandó sorok számát. Ehhez módosítania kell a $RecordsToInsert változót.

Ezután lefuttatjuk a szkriptet, amely a generált rekordokat beilleszti az adatbázisba. A folyamat elindításához lépjen erre a címre: http://localhost/fcdemo/generate-random-data.php.

Végül egy üzenetnek kell megjelennie: "Beszúrva ($RecordsToInsert) rekordok"

2. lépés: A webhely csontvázának előkészítése

A legtöbbet alkotnunk kell egyszerű oldal diagramunk megjelenítéséhez. Valami ilyesmi:

FusionCharts v3.2 – LinkedCharts PHP bemutató