Eszköztár
135 Kezdőlap - Webszerkesztés - PHP - Képszerkesztés
ujdomainek.hu

Képszerkesztés

GD library

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
  1. egy felhasználó által feltöltött túlméretes képet kell lekicsinyíteni,
  2. egy felhasználó által feltöltött képet szeretnénk vízjellel ellátni,
  3. egy meglévő képet kell valamilyen felirattal kiegészíteni.
  4. valamilyen adatsor, vagy számhalmaz alapján kell egy grafikont készíteni.
  5. 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:


Képmásolás

Képmódosítás

Képrajzolás

előző oldal random oldal következő oldal


Eddig 1 hozzászólás van a témához:

2020-03-13 20:01 Szabó Zoltán Tamás FREE-DIR beálítás is kell mert különben nem müködik.




Új hozzászólás:
E-mail cím:


Erre a címre küldjük ki a hozzászólás jóvá- hagyásához szükséges linket. Az e-mail címet sehol nem tesszük közzé.

Név:


Ez a név fog megjelenni az Ön hozzászólásai mellett.

Mennyi tizenhárom + három?
Számjegyekkel írja be!



Ez a robotok beírása elleni védelem miatt szükséges ellenőrzés.


© infojegyzet.hu, 2019. február