A PHP-ban a grafikai modult nem a képek egyszerű kitételére használhatjuk, hanem a szerver oldalon képekkel végzett manipulációkra. A PHP grafikához szükséges, hogy a szerver oldalon be legyen töltve a php_gd modul vagy az imagemagick modul.
A két modul eltérően működik. Az Imagick kicsit többet tud és kicsit másképpen kell programozni. A GD grafika inkább a hagyományos procedurális programozást támogatja, míg az Imagick az OOP-t támogatja.
A GD modul a PHP többi részével együtt folyamatosan fejlődik. Jelenleg az alábbi fájltípusokat tudja kezelni.
- GIF - olvasás, írás (legfeljebb 256 szín)
- JPEG - olvasás, írás (veszteséges tömörítés)
- PNG - olvasás, írás (Specialitás, hoghy nem veszteséges a tömörítés és a kép lehet áttetsző)
- WBMP - olvasás, írás (régebbi mobiltelefonok által használt képtípus)
- XBM - olvasás, írás (x-windows rendszerek képformátuma)
- WebP - olvasás, írás (Google által használt képformátum. Hasonló minőséggel kisebb fájlméret érhető el, mint a JPEG esetén. A képek lehetnek áttetszőek, mnt a PNG esetén.)
Az alábbiakban a GD esetén leggyakrabban használt függvényeket, a leggyakrabb használati módokat tárgyaljuk.A FreeType library használatával különböző betűtípusokat lehet használni.
gd_info() - a GD library tulajdonságainak kiiratása
getimagesize ( string $filename
, array &$image_info
= null
) : array|false - Egy fájlban lévő képek mérete. Az első paraméter a fájl elérési útvonala fájlnévvel a végén. Második paraméterként egy üres tömböt adhatunk át, amibe tömbbe visszakapjuk az un. exif információkat. Visszatérési értékként hét elemű tömöbt kapunk vissza, aminek a 0. és 1. eleme az X, második az y méret. a többi egyéb információ. Ha nem képfájl, akkor false értéket ad vissza.
Kép létrehozása
getimagesizefromstring ( string $string
, array &$image_info
= null
) : array|false - egy stringbe korábban beolvasott fájl adatiból ugyanazokat a paramétereket adja vissza, mint a getimagesize(). A különbség az, hogy az első paraméter a képfájlt tartalmazó string.
A képekkel való művelet során a memóriában létrejön a képhez tartozó erőforrás, amelyet egy resource típusú változó tárol. A kép méretétől függően ez több-kevesebb memóriát foglal, ezért fontos, hogy a képmanipulálás befejeztével ez az erőforrás felszabaduljon. A legcélszerűbb az, hogy minden képmanipuláló utasítást függvény belsejében, vagy objektum belsejében hajtsuk végre, mivel az eljárásból való kilépéskor a lokális változó automatikusan megszűnik és felszabadul a memória.
imagecreate ( int $width
, int $height
) : resource - a megadott méretekkel létrejön egy kép a memóriában. A resource típusú változó tartalmazza a képet. A kép színpaletta alapú, vagyis 256 színt tartalmazhat csak!
$width
, int $height
) : resource - True color színű, fekete képet hoz létre.$filename
) : resource$filename
) : resource$filename
) : resource$filename
) : resource$filename
) : resource$filename
) : resource$filename
) : resource$image
) : resourceA memóriába töltött kép erőforráshoz színeket rendelhetünk hozzá:
$image
, int $red
, int $green
, int $blue
) : int - A megadott képerőforráshoz a vörös, zöld és kék komponensekből állíthatunk elő egy színt és azt lementhetjük egy változóba, amely a megadott színt reprezentálja. Ezzel a változóval tudunk különböző műveleteket végezni a képen a memóriában. Az RGB komponensek értéke 0..255 között lehet. Ha nem lehet előállítani a színt, akkor a visszatérési érték false lesz, ami összekeverhető a 0 értékkel, ezért ha hibaellenőrzésre van szükség, akkor az azonosan egyenlő: === ellenőrzést érdemes használni.Ha egy képet betöltöttünk a memóriába, akkor a különböző képmanipuláló műveletek után kimenthetjük egy fájlba a szerver vagy kiküldhetjük a böngészőnek.
imagejpeg ( resource $image
, mixed $to
= null
, int $quality
= -1 ) : bool - kiküld egy jpeg fájlt a háttértárra vagy a böngészőnek a kimenetre. Ha a $to paraméter nincs megadva vagy üres, akkor a böngészőnek küldi, ha egy elérési útvonal és fájlnév van, akkor lementi a szerveren. A $quality paraméter 0..100% közötti egész szám és a tömörítés mértékét jelenti. A nagyobb százalék jobb minőséget, de nagyobb fájlt eredményez. Az alapértelmezett érték 75% körüli és az érték -1. A visszaadott logikai érték a kiküldés sikerességét jelenti.
$image
, mixed $to
= null
, int $quality
= -1 , int $filters
= -1 ) : bool - kiküld egy png fájlt a kimenetre vagy a szerver fájlrendszerébe. A $quality paraméter a zlib tömörítéstminőségét jelöli, 0 - tömörítetlen, 9 a maximális tömörítés. A $filter paraméter a PNG fájlok filterezését jelöli. részletesebb leírás a dokumentációban. A PNG fájlok mérete általában legalább kétszer akkora, mint a hasonló tartalmú jpeg fájlok mérete.$image
, mixed $to
= null
) : bool - Egy gif fájlt állít elő vagy küld ki a böngészőnek. A GIF fájlok legfeljebb 256 színűek lehetnek!$image
, mixed $to
= null
, ]int $foreground
] ) : bool - WBMP típusú kimenetet hoz létre. A $foreground paramétera korábban imagecolorallocate() fügvénnyel létrehozott színt jelenti, ami az előtér színe lesz. Minden más szín háttér szín.$image
, mixed $to
= null
, int $quality
= 80 ) : bool - WebP típusú képet hoz létre. A $quality paraméter a tömörítés mértékét jelöli. 0 a legkisebb fájl és legrosszabb minőség, 100 a legnagyobb fájl és legjobb minőség.$image
, mixed $filename
, [int $foreground
] ) : bool - Hasonlóan a wbmp esethez itt is lehet átlátszó színt adni.$image
) : bool - felszabadítja a képet tartalmazó memóriaterületet, amit az imagecreate vagy imagecreatetruecolor fügvénnyel hoztunk létre. A paramétere a képet jelképező erőforrás változó.Képek manipulációja
Többféle manipulációt lehet használni. A leggyakrabbak:
- Kép geometriájának változtatása: átméretezése, részlet kivágása, elforgatás, tükrözés, kép kiterjeszétse
- Színekkel való manipuláció: fehéregyensúly, kontraszt módosítása, szín telítettsége
- Élesség, homályosítás - erre nincsen beépített lehetőség a GD-ben.
- Rajzolás, írás a képre.
Kép geometriájának változtatása
$image
, array $rect
) : resource|false - Levágja a képet. $rect - 4 elemű tömb, amelyben a vágás helye és méretei vannak: x, y, koordináták, szélesség magasság. Minden adat pixelben van megadva. A visszatérési érték vagy egy új (vagy ugyanaz az) image változó, vagy pedig false, hogyha hiba csúszott a műveletbe.$dst_image
, resource $src_image
, int $dst_x
, int $dst_y
, int $src_x
, int $src_y
, int $dst_w
, int $dst_h
, int $src_w
, int $src_h
) : bool - Az eredeti kép egy részét kiveszi és átméretezi. - $src_image - az eredeti kép, $src_x, $src_y, $src_w, $src_h - a forrás képből annak a területnek a leírása, ahonnak kiveszi a képadatokat (x, x, szélesség, magasság)
- $dst_image - az eredmény kép, $dst_x, $st_y, $dst_w, $_dst_h az eredmény képbe behelyezi a forrás terület adatait.
Ennek használata során a forrás kép a teljes képet jelöli, létrehozunk egy másik képet, (amely mondjuk kisebb, mint a régi), és abba bemásoljuk a képi információt.
$dst_image
, resource $src_image
, int $dst_x
, int $dst_y
, int $src_x
, int $src_y
, int $dst_w
, int $dst_h
, int $src_w
, int $src_h
) : bool - Hasonló, mint az előző függvény, de a kép adatokat újraszámolja a PHP. $image
, int $new_width
, int $new_height
= -1 , int $mode
= IMG_BILINEAR_FIXED ) : resource|false - Átméretez egy képet a megadott szélességre és magasságra.$image
, float $angle
, int $bgd_color
, bool $ignore_transparent
= false
) : resource|false - Megadott szöggel elforgatja a képet. $angle - fokban megadva, $bgd_color - az a kitöltőszín, amivel az elforgatott kép hátterét kitölti. $image
, int $mode
) : bool - Egy kép tükrözése. A $mode paraméter az alábbi lehet:- IMG_FLIP_HORIZONTAL - vízszintes tükrözés.
- IMG_FLIP_VERTICAL - függőleges tükrözés
- IMG_FLIP_BOTH - mind a két irányú tükrözés
Írás, rajzolás egy képre
$image
, int $x
, int $y
, int $color
) : bool - Egy képpont kirajzolása a megadott koordinátákba, a megadott színnel.$image
, resource $brush
) : bool - a képhez hozzárendel egy ecsetet, amelyet az imageline és image polygon utasítások használhatnak.$image
, int $x1
, int $y1
, int $x2
, int $y2
, int $color
) : bool - A megadott kezdő és végpontok közé a megadott színnel rajzol egy vonalat.$image
, int $x1
, int $y1
, int $x2
, int $y2
, int $color
) : bool - rajzol egy téglalapot a megadott koordináták jelentik a téglalap ellentétes csúcsait.$image
, array $points
, int $num_points
, int $color
) : bool - Rjazol egy zárt sokszöget. A $points tömb tartalmazza, a poligon csúcsainak a koordinátáit olyan módon, hogy $points[0] => x0, $points[1] => y0, $points[2] => x1, $points[3] => y1, stb... A $num_polints jelenti a pontok számát, amely a points tömb méretének a fele, minimum 3.$image
, array $points
, int $num_points
, int $color
) : bool - Ugyanaz, mint fent csak nyitott sokszöget rajzol ki.$image
, int $cx
, int $cy
, int $width
, int $height
, int $color
) : bool - Megadott középponttal, megadott szélességű és magasságú ellipszist rajzol. Ha a szélesség és a magasság egyenlő, akkor kört rajzol.$image
, int $cx
, int $cy
, int $width
, int $height
, int $start
, int $end
, int $color
) : bool - Körívet rajzol a megadott középponttal, szélességgel és magassággal, kezdő és végső szöggel és színnel. A szög fokokban van megadva.$image
, int $x
, int $y
, int $color
) : bool - egy kép megadott pontjából kezdve kitölti a megadott színnel a képet.$image
, int $x
, int $y
, int $border
, int $color
) : bool - kitölt egy képet a megadott ponttól kezdve a $border színnel megadott határvonalig. Ha a $border szín nyitott, akkor a kitöltés "kifolyik" a határvonalból.$image
, int $x1
, int $y1
, int $x2
, int $y2
, int $color
) : bool$image
, array $points
, int $num_points
, int $color
) : bool$image
, int $cx
, int $cy
, int $width
, int $height
, int $color
) : bool$image
, int $cx
, int $cy
, int $width
, int $height
, int $start
, int $end
, int $color
, int $style
) : boolÍrás egy képre
$image
, float $size
, float $angle
, int $x
, int $y
, int $color
, string $fontfile
, string $text
) : array - A megadott méretben, szöggel ó, megadott koordinátájú helyre, színnel egy TTF font-tal kiír egy szöveget. A TTF fontnak a szerveren a PHP által olvasható könyvtárban kell lennie. A szöveg UTF-8 kódolású.$file
) : int - betölt egy font fájlt a szerverről a memóriába. A font fájlok gdf kiterjesztésű fájlok lehetnek és az interneten találhatók ilyenek ingyenesen is. (pl. http://www.danceswithferrets.org/lab/gdfs/). A visszaadott értéket utána más a képre rajzoló utasításokban lehet használni.$font
) : int, imagefontwidth ( int $font
) : int - ha szükséges le lehet kérdezni a font magasságát és szélességét is. az eredményt pixelben kapjuk meg.$image
, int $font
, int $x
, int $y
, string $c
, int $color
) : bool - Kiír a megadott fonttal, a megadott helyre és színnel egy karaktert vízszintesen.$image
, int $font
, int $x
, int $y
, string $c
, int $color
) : bool - Ugyanaz, mint az előző, csak függőlegesen írja ki a karaktert.$image
, int $font
, int $x
, int $y
, string $string
, int $color
) : bool - A képre kirajzol az adott koordinátákkal kezdődően a megadott (és korábban betöltött) fonttal egy szöveget vízszintesen, a megadott színnel.$image
, int $font
, int $x
, int $y
, string $string
, int $color
) : bool - A képre kiír egy szöveget függőlegesen. A paraméterek ugyanazok, mint az előző függvényben.Kép színeinek és egyéb paramétereinek módosítása (imagefilter)
$image
, int $filtertype
, int $arg1
= ? , int $arg2
= ? , int $arg3
= ? , int $arg4
= ? ) : bool - A $filtertype paramétertől függ az alkalmazandó funkció és a további paraméterek léte és jelentése.-
IMG_FILTER_NEGATE
: Negatív kép létrehozása -
IMG_FILTER_GRAYSCALE
: Szürkeárnyalatos kép létrehozása. -
IMG_FILTER_BRIGHTNESS
: A kép fényességének állítása. Azarg1
állítja be a fényességet -255...+255-ig. -
IMG_FILTER_CONTRAST
: A kontraszt állítása. Ha arg1 negatív, akkor nő a kontraszt. -
IMG_FILTER_COLORIZE
: A szín telítettségét növeli. Azarg1
,arg2
andarg3
a Red, Green, Blue komponenst jelenti, azarg4
az átlátszóságot. Minden paraméter 0..255 között lehet. -
IMG_FILTER_EDGEDETECT
: A fényességváltozást kiemeli. Vagyis a képen lévő élek változását megnöveli! -
IMG_FILTER_EMBOSS
: A képen EMBOSS hatást hoz létre. -
IMG_FILTER_GAUSSIAN_BLUR
: Homályosítás az ún. "Gaussian" módszerrel. -
IMG_FILTER_SELECTIVE_BLUR
: A képet homályosítja. -
IMG_FILTER_MEAN_REMOVAL
: kiveszi a képből a "rajz" effektust. -
IMG_FILTER_SMOOTH
: Lágyítja a képet. Azarg1
a lágyítás mértéke. -
IMG_FILTER_PIXELATE
: Pixelesebbé teszi a képet. Azarg1
a pixelblokkok méretét adja meg, azarg2
a pixelezés módját adja meg. -
IMG_FILTER_SCATTER
: Szórás hatást hoz létre. Azarg1
ésarg2
tmeghatározza a szórás erősségét és azarg3
egy tömb, amiben a színek vannak definiálva.
A fenti paraméterek változhatnak a PHP verziójától függően és a jelenleginél nincsen egzaktabb leírásuk.
A GD grafikáról innen lehet bővebb leírást kapni: https://www.php.net/manual/en/ref.image.php
Az Imagick grafikláról innen lehet bővebbet megtudni: https://www.php.net/manual/en/class.imagick.php