Jegyzet
Weboldalak készítésekor, üzemeltetésekor számtalanszor botlunk olyan problémába, hogy
meglévő képeket szükséges szerkesztenünk, módosítanunk, vagy éppenséggel egy teljesen
új képet kell létrehoznunk a "semmiből". Ilyen eset lehet például az,
amikor
- egy felhasználó által feltöltött túlméretes képet kell lekicsinyíteni,
- egy felhasználó által feltöltött képet szeretnénk vízjellel ellátni,
- egy meglévő képet kell valamilyen felirattal kiegészíteni.
- valamilyen adatsor, vagy számhalmaz alapján kell egy grafikont készíteni.
- a robotok elleni védelem részeként kell egy CAPTCHA-képet készíteni.
A folytatásban azt fogjuk áttekinteni, hogy miként van lehetőségünk PHP programmal - tehát emberi
beavatkozás nélkül, automatizáltan - megvalósítanunk ezen feladatokat. Mindezekhez a PHP képkezelő
függvényeit fogjuk felhasználni, melyek részletes leírása az alábbi linken érhető el:
Alapfeltételek
Sajnos nem lehetünk biztosak benne, hogy a PHP rendszerünk az aktuális telepítési paraméterek mellett valóban
"tud grafikául", vagyis hogy a telepítés során engedélyezve lett-e a grafikai könyvtár használata. Ennek meglétét
eldönthetjük pl. az alábbi rövidke kis program kipróbálásával, futtatásával - ami egyébként is a későbbi grafikai
programjaink alapját fogja jelenteni.
<?php
header("Content-type: image/gif") ; // 1.
$kep = imagecreate( 240, 180 ) ; // 2.
/* Ide jön majd a tényleges rajzolás. */
imagegif( $kep ) ; // 3.
imagedestroy( $kep ) ; // 4.
?>
Helyes működés esetén eredményként egy
240x180-as fekete téglalapot kell látnunk a böngészőben.
A program ugyanis a következőt teszi:
1. header()
Ez a függvény gondoskodik róla, hogy a PHP programunk ne a szokásos módon HTML kódot akarjon előállítani,
hanem ezúttal egy kép legyen az eredmény. A függvény paraméterében a kép formátumát adjuk meg, mely a
gif
helyén
jpg,
png, de akár
webp is lehet. A header() függvényt nem fogjuk minden képkezelő
program elején használni, hanem csak akkor lesz rá szükség, ha az előállított képet a böngészőben is azonnal
meg akarjuk jeleníteni, és nem pedig csak háttértárra akarjuk egyelőre lementeni, mint pl. képfeltöltéskor
a képkicsinyítés során. Fontos megjegyezni, hogy a header() függvényt csak akkor veheti figyelembe a szerver,
ha azt megelőzőleg még semmit nem írtunk a böngészőbe. Ez azt jelent, hogy
azonnal a PHP kóddal kell kezdenünk
a forráskódunkat, vagyis azt semmilyen egyéb HTML tartalom nem előzheti meg, így konkrétan még egy üres sor, vagy
épp egy szóköz, egy tabulátor sem!
2. imagecreate()
Ezzel a függvénnyel hozzuk létre a képet. Ám ez nem azt jelenti, hogy innentől lesz látható a kép, ugyanis a kép
létrehozása itt csupán a memóriában történik, vagyis a függvény visszaadott értéke a képet jelentő memóriaváltozó
lesz. Erre a memóriaváltozóra lesz szükségünk a folytatásban az összes többi képkezelő eljárás során. Képet az
alábbi függvényekkel hozhatunk létre:
3. imagegif(),
illetve
imagejpeg(),
imagepng(),
imagewebp()
A memóriában elkészült képet jeleníti meg a böngészőben (vagy pedig menti el fájlba) a függvények nevében jelzett formátumnak megfelelően.
Esetünkben, a mi jelenlegi négy soros kis programunk esetén minden egyéb rajzolási tevékenység hiányában ez a kép teljesen fekete lesz,
egyéb tartalom nem lesz rajta látható.
4. imagedestroy()
A képlétrehozás mindig sok memóriafelhasználással jár, ezért a kép elkészülte után az érintett memóriaterületet fel kell szabadítani
az imagedestroy() függvénnyel.
És mi van ha nem...?
Mit tehetünk abban az esetben, ha bár mindent a fent leírtaknak megfelelően csináltunk, mégsem jelenik meg a program
futtatásának hatására a fekete téglalap?
Ebben az esetben gyanakodhatunk, hogy az aktuális PHP beállításink nem engedélyezik a grafikai könyvtár használatát.
Mi az a grafikai könyvtár?
A grafikai könyvtár, vagy ahogyan a PHP hívja: a
GD library
egy nyílt forráskódú könyvtár (kifejezőbben fogalmazva: függvénygyűjtemény) különféle képek dinamikus, vagyis valós időben
történő létrehozásához, illetve szerkesztéséhez. Használata nem feltétlenül kerül engedélyezésre a PHP telepítése során.
Honnan tudható, hogy a grafikai könyvtár használata engedélyezett-e, vagy sem?
Erről a korábban már tárgyalt
PHP info segítségével tudunk biztosan meggyőződni.
Futtassuk a saját PHP környezetünkben a
phpinfo()
függvényt, és az eredményként kapott oldalon a
Ctrl+F forróbillentyű használatával keressünk rá a
GD karaktersorozatra. A találatok között egy az alábbihoz hasonló kezdetű
táblázatot kell felfedeznünk:
A táblázat első sora jelzi, hogy a GD könyvtár engedélyezve van. Ám ha nincs engedélyezve, az nem abból fog kiderülni, hogy
az
enabled helyén
disabled fog állni, hanem abból, hogy meg sem találjuk a GD című táblázatot!
Mit kell tenni, ha a grafikai könyvtár használata nincs engedélyezve?
Lokális fejlesztőkörnyezet, vagyis pl. AppServ, XAMPP használata esetén a grafikai könyvtár a
php.ini fájlban
engedélyezhető. Ennek helyére érdemes rákeresni, valahol a webszerver mappái között meg fogjuk találni. Ezt követően
nyissuk meg a fájlt egy egyszerű szerkesztőben, és keressük meg benne az alábbi sort:
;extension=php_gd2.dll
majd töröljük a sor elejéről a pontosvesszőt, mely miatt kommentnek számít a sor. A fájl mentése után indítsuk újra
a webszervert az új beállítás életbe lépéséhez.
Bérelt tárhely esetén nem férhetünk hozzá közvetlenül a szerveren található php.ini fájlhoz, ezért vagy a tárhelyhez
tartozó admin felületen lehetséges bekapcsolnunk GD engedélyezését, vagy ha ez az opció sem elérhető, akkor fel kell
venni az üzemeltetővel a kapcsolatot, és nála kérni a GD engedélyezésének bekapcsolását.
Abban az esetben, ha elhárítottunk minden akadályt, és immáron csakugyan működnek a képszerkesztő funkcióink, továbbléphetünk
a konkrétabb lehetőségek megismeréséhez.
További részletek: