Funkce pro resize obrázků
Dlouho jsem na internetu hledal nějakou funkci, která by jednoduše uměla resizovat obrázky, ale žádnou vhodnou jsem nenašel. Buď fungovala jen částečně nebo byla příliš komplexní a pro moje potřeby zbytečně složitá. Proto jsem se rozhodl napsat vlastní funkci, která mým požadavkům vyhovuje nejlépe. Funkce je rozebrána formou komentářů ve zdrojovém kódu.
<?php
function resizePhoto($vstup,$vystup,$width,$height,$aspectratio,$quality) {
/*
$vstup //cesta k původnímu obrázku
$vystup //cesta ke zmenšenému obrázku
$width //šířka zmenšeného obrázku
$height //délka zmenšeného obrázku
$aspectratio //zachovávat poměr stran (0/1)
$quality //komprese (100 - nejlepsi) - doporucuji 75
*/
if(file_exists($vstup)){ //nejprve zjistíme, zda-li byl zadán vstup a existuje
$vstup = ImageCreateFromJPEG($vstup); //načteme si obrázek do proměnné
} else {
echo "resizePhoto: Nebyl zadán vstup !";
return false;
}
$vstup_wd = imagesx($vstup); //zjistíme šířku původního obrázku
$vstup_ht = imagesy($vstup); //zjistíme délku původního obrázku
if($vstup_wd <= $width && $vstup_ht <= $height) {
//pokud je obrázek menší než požadovaná velikost nebudeme počítat nové hodnoty
$width = $vstup_wd;
$height = $vstup_ht;
} else {
if($aspectratio) {
//pokud je zaplý aspect ratio spočítáme novou velikost v daném poměru
$w = round($vstup_wd * $height / $vstup_ht);
$h = round($vstup_ht * $width / $vstup_wd);
if(($height-$h)<($width-$w)){
$width =& $w;
} else {
$height =& $h;
}
}
}
$temp = imageCreateTrueColor($width,$height);
//vytvoříme obrázek o rozměrech zmenšeného obrázku
imageCopyResampled($temp, $vstup, 0, 0, 0, 0, $width, $height, $vstup_wd, $vstup_ht);
//obrázky zkopíruje na sebe, takže dojde vlastně ke zmenšení výsledného obrázku
ImageJPEG($temp, $vystup, $quality);
//uložíme zmenšený obrázek na výstup
imagedestroy($vstup); //uvolnime pamět
imagedestroy($temp); //uvolnime pamět
}
//příklad použítí
resizePhoto('kyticka.jpg','kyticka_mala.jpg','160','160','1','75');
?>
Dále by se dala funkce rozšířit o resize více typů obrázků PNG, GIF a na vstupu kontrolovat, zda se jedná opravdu o obrázek v daném typu, například pomocí regulérních výrazů. Funkci můžete volně použít kde chcete bez udání autora. Akorát bych byl rád za zmínku v komentářích, jestli se skript někomu hodil.