GD #2: Hello Word
GD knihovna je open source sloužící k dynamickému vytváření obrázku. Ve druhém pokračování se podíváme na vytvoření prázdného obrázku a vložení textu Hello Word.
V minulém článku jsem se zaměřil na základní, teoretické, vysvětlení GD knihovny.
V tomto dalším pokračování si vytvoříme první, prázdný, obrázek, do kterého vložíme text.
GD Info
První a základní funkce, která není zase až tak důležitá jako spíše zajímavá je:
1 |
array gd_info ( void ) |
Funkce vrací asociativní pole informací o verzi a možnostech aktuálně používané GD knihovny:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Array ( [GD Version] => bundled (2.0.23 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XPM Support] => [XBM Support] => 1 [JIS-mapped Japanese Font Support] => ) |
Parametr | Význam |
---|---|
GD Verzion | Verze libgd |
FreeType Support | True/False – podpora FreeType |
FreeType Linkage | Pokud je FreeType TRUE, vrací metodu, jakou je FreeType připojena. ‘with freetype’, ‘with TTF library’, nebo ‘with unknown library’ |
T1Lib Support | True/False – Podpora T1Lib |
GIF Read Support | True/False – podpora čtení GIFů |
GIF Create Support | True/False – podpora pro tvorbu GIFů. |
JPG Support | True/False – podpora JPG |
PNG Support | True/False – podpora PNG |
WBMP Support | True/False – podpora WBMP |
XPM Support | True/False – podpora XPM |
XBM Support | True/False – podpora XBM |
JIS-mapped Japanese Font Support | True/False – podpora japonského písma |
Pokud používáte, dnes nejrozšířenější, verzi 2.x, měli by jste dostat ve většině případů hodnoty true – 1.
GD_info je funkce, která není téměř vůbec používaná, jako alternativu lze použít funkci PHPInfo, která vrací všechny informace o aktuální GD knihovně stejně jako gd_info.
ImageCreate, ImageCreateTrueCollor
Pro vytvoření nového, prázdného obrázku, existují podstatě dvě funkce.
1 2 |
resource imagecreate ( int $width , int $height ) resource imagecreatetruecolor ( int $width , int $height ) |
Obě funkce jsou si podobné jak návratovou hodnotou (vrací zdrojový obrázek), tak vstupními parametry:
- Width – výška obrázku v pixelech
- Height – šířka obrázku v pixelech
Rozdílné vlastnosti obou funkcí se projevují v počtu generované palety barev v obrázcích. Funkce ImageCreate dokáže generovat pouze 256 barev, což může ve většině případů dost vadit. Na rozdíl od toho funkce ImageCreateTrueCollor je schopna generovat 16.8 milionu barev. Bohužel podpora je až od verze GD 2.0.1.
ImageColorAllocate
Nezbytnou funkcí pro používání GD knihovny je ImageColorAllocate:
1 |
int imagecolorallocate ( resource $image , int $red ,<br /> int $green , int $blue ) |
Funkce slouží k alokaci barvy, kterou chceme v obrázku použít. Jako vstupní parametry zadáváme RGB složky barvy, kterou chceme použít, a tuto barvu alokujeme do obrázku:
- Image – resource obrázku
- Red – červená složka barvy
- Green – zelená složka barvy
- Blue – modrá složka barvy
K funkci existuje jedna alternativa – ImageColorAllocateAlpha, která dokáže navíc vytvořit alpha kanál pro průsvitnost barvy. To ale není zatím důležité.
Funkce ImageColorAllocate musí být volána při každém vytvoření barvy, kterou chceme v obrázku používat.
ImageString
Abychom mohli vytvořit příklad Hello Word, budeme potřebovat znát ještě funkci pro výpis textu. Pro výpis textu existuje v GD knihovně funkcí víc, a celému výpisu se bude věnovat další kapitola. Prozatím nám bude stačit znát funkci ImageString, která vykreslí do obrázku textový řetězec:
1 |
bool imagestring ( resource $image ,<br /> int $font , int $x , int $y , string $string , int $color ) |
Funkce obsahuje celkem šest povinných parametrů, které rozhodují o umístění textu, jeho barvě či velikosti:
- Image – resource obrázku
- Font – použité písmo pro vykreslení
- X – levá horní souřadnice na ose x, kde bude začínat text
- Y – levá horní souřadnice na ose y, kde bude začínat text
- String – řetězec pro vypsání
- Color – bavra vypsaného textu
Funkce vrací hodnotu TRUE při správném vykreslení, při chybě vrací hodnotu FALSE.
Funkce nemá žádné další rozšíření a umožňuje pouze vypsat vodorovný text.
ImagePng
Poslední funkce, kterou potřebuje prozatím znát je ImagePng.
Jak je z názvu patrné, funkce bude generovat obrázek ve formátu PNG. Samozřejmě existují alternativy i pro ostatní typy obrázku, prozatím si ale vystačíme s touto:
1 |
bool imagepng ( resource $image <br />[, string $filename [, int $quality [, int $filters ]]] ) |
Funkce obsahuje celkem 4 parametry, z nichž pouze první je povinný, a ostatní jsou nepovinné:
- Image – resource obrázku
- Filename – název obrázku pro uložení
- Quality – kvalita vykresleného obrázku
- Filters – Umožňuje snížit velikost obrázku (prozatím nás nebude zajímat)
Pouze první parametr je povinný, pokud nebudou zadány ostatní parametry (hlavně filename), bude se obrázek vykreslovat přímo v prohlížeči a nebude nikde uložen.
Ukázkový příklad
Nyní známe všechny funkce, abychom si mohli vykreslit ukázkový přiklad Hello Word.
Při generování je nutné si uvědomit, že generované prvky v obrázku jsou chápány jako vrstvy, které
jsou navzájem překrývány. Prvek, který je vykreslen dříve, je překryt prvkem, který je vykreslen na něm (výjimku tvoří použití transparentních barev).
Ukázkový kód vykreslí obrázek do prohlížeče. Před jeho vykreslením je nutné prohlížeči oznámit, o jaký typ souboru se jedná odesláním správných hlaviček pomocí Header.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//odeslání hlaviček pro PNG soubor Header('Content-type: image/png'); //vytvoření TrueCollor obrázku $image = ImageCreateTrueColor( 110, 35 ); //Alokace bílé barva zadáním hodnot RGB $color1 = ImageColorAllocate($image, 255, 255, 255); //alokace modré barvy zadáním hodnot RGB $color2 = ImageColorAllocate($image, 0, 0, 255); //Výpis textu na souřadnicích 10, 10 velikostí 5 bílou barvou ImageString($image, 5, 10, 10, "Hello Word", $color1 ); //Výpis textu na souřadnicích 9, 9 velikostí 5 modrou barvou ImageString($image, 5, 9, 9, "Hello Word", $color2 ); //vyreslení obrázku PNG ImagePng( $image ); |
Kód vykreslí prázdný obrázek, ve kterém je dvakrát vypsáno Hello Word. Všimněte si, že text vypsaný jako druhý překrývá text vypsaný prvně.
V příští kapitole se zaměříme na různé druhy výpisu.