Zmenšování obrázků pomocí PHP
Úvod
Zmenšování obrázků se hodí, pokud připravujete třeba galerii nebo fotografickou soutěž. Pokud máte na serveru PHP zkompilované s podporou GD knihovny,[1] máte k dispozici velké množství funkcí pro manipulaci s obrázky.[2]
Chtěl bych popsat jednoduchý skript, který nahraje obrázek na server a automaticky vytvoří náhled.
Upload obrázku na server
Prvním krokem je vytvoření jednoduchého HTML formuláře. Je zde jen jediný háček, element form musí obsahovat atribut enctype="multipart/form-data". To je nutné, protože budeme na server přenášet binární data (obrázek).
První část skriptu resize.php se stará o upload obrázku. Nejprve je nutné ověřit, že se uživatel nesnaží nahrát na server soubor, který by mohl být nebezpečný (např. php skript). Proto je na začátku skriptu definováno pole, které obsahuje povolené koncovky souborů ($cfg_Extensions). Ověření provedeme jednoduše pomocí funkce In_Array().[3] Příponu souboru zjistíme pomocí funkce PathInfo().[4]
$cfg_Extensions = Array ('png', 'jpg', 'jpeg');
$path = PathInfo($_FILES['File']['name']);
if (!In_Array(StrToLower($path['extension']), $cfg_Extensions))
{
print 'Vkládaný soubor není obrázek!';
exit;
}
A pokud je vše v pořádku, tak přesuneme soubor z tempu do žádaného adresáře.[5]
Move_Uploaded_File($_FILES['File']['tmp_name'], './'.$Name);
Vytvoření náhledu
Nejdřív musíme spočítat rozměry náhledu. V proměnné $cfg_Scale je uloženo požadované měřítko. Funkcí getImageSize()[6] zjistíme rozměry původního obrázku a vynásobíme je měřítkem.
$cfg_Scale = 0.3;
$Image = getImageSize($Name);
$NewWidth = $Image[0]*$cfg_Scale;
$NewHeight = $Image[1]*$cfg_Scale;
Na závěr vytvoříme náhled. V tomto okamžiku se kód větví, protože pro každý formát obrázku musíme použít jiné funkce. Popíšu jen jednu větev. Druhá je až na použité funkce stejná.
//VYTVOŘENÍ NOVÉHO OBRÁZKU PRO NÁHLED
$out = ImageCreateTrueColor ($NewWidth, $NewHeight);
// NAČTENÍ PŮVODNÍHO OBRÁZKU
$source = ImageCreateFromJpeg ($Name);
// ZMENŠENÍ
ImageCopyResized ($out, $source,0,0,0,0,$NewWidth,$NewHeight,$Image[0],$Image[1]);
// ULOŽENÍ OBRÁZKU NA DISK
// NÁZEV OBRÁZKU BUDE ZAČÍNAT PREFIXEM thumb-
ImageJpeg ($out, './thumb-'.$Name, 50);
// UVOLNĚNÍ PAMĚTI
ImageDestroy($out);
ImageDestroy($source);
Závěr
A to je celé. Oba dva soubory si můžete stáhnout zde (zip, 1,1 kB).