Zmenšování obrázků pomocí PHP 2
Úvod
Dříve jsem popsal jednoduchý skript na zmenšování obrázků pomocí PHP. V tomto článku bych se chtěl zaměřit na trochu složitější situaci.
Někdy je potřeba vytvořit systém, který bude automaticky vytvářet náhledy o zadané velikosti z obrázků, které mají různý poměr výška/šířka. Nejjednodušší je asi obrázek zmenšit tak, aby se poměr nezměnil a zbývající prostor vyplnit barnou pozadí.
Postup
Nejdřív si vytvoříme prázdný obrázek podle zadaných rozměrů. To je velmi jednoduché.
$width = 800; //SIRKA NAHLEDU
$height = 600; //VYSKA NAHLEDU
$out = ImageCreateTrueColor ($width, $height);
Poté musíme zjistit, který rozměr obrázku je větší a spočítat poměr šířka/výška. Poté větší rozměr obrázku nastavíme podle zadaných rozměrů náhledu a zbývající stranu dopočítáme pomocí poměru.
// ZJISTENI VELIKOSTI OBRAZKU
$name = 'img.jpg';
$Image = getImageSize($name);
//NEJDRIV OSETRIME PRIPAD, KDY JE VESTSIM ROZMEREM SIRKA
if ($Image[0] >= $Image[1])
{
$width1 = $width;
$height1 = $Image[1]*$width/$Image[0];
}
else
{
$height1 = $height;
$width1 = $Image[0]*$height/$Image[1];
}
Dále si pomocí funkce ImageColorAllocate alokujeme barvu pozadí pro obrázek. V našem případě bílou (RGB: 255 255 255). Prvním parametrem funkce je obrázek a do dalších tří parametrů musíme zadat složky RGB kódy zvolené barvy. Touto barvou zaplníme celý obrázek funkcí ImageFill.
$bgColor = imagecolorallocate($out, 255, 255, 255);
imagefill($out, 0, 0, $bgColor);
Nakonec načteme obrázek, který chceme zmenšit, zmenšíme ho a náhled uložíme na disk.
$nameNew = 'thumb.jpg';
$source = ImageCreateFromJpeg($name);
ImageCopyResized ($out, $source,0,0,0,0,$width1,$height1,$Image[0],$Image[1]);
ImageJpeg($out, $nameNew, 50);
Celý skript je zde.
$width = 800; //SIRKA NAHLEDU
$height = 600; //VYSKA NAHLEDU
$out = ImageCreateTrueColor ($width, $height);
// ZJISTENI VELIKOSTI OBRAZKU
$name = 'img.jpg';
$Image = getImageSize($name);
//NEJDRIV OSETRIME PRIPAD, KDY JE VESTSIM ROZMEREM SIRKA
if ($Image[0] >= $Image[1])
{
$width1 = $width;
$height1 = $Image[1]*$width/$Image[0];
}
else
{
$height1 = $height;
$width1 = $Image[0]*$height/$Image[1];
}
$bgColor = imagecolorallocate($out, 255, 255, 255);
imagefill($out, 0, 0, $bgColor);
$nameNew = 'thumb.jpg';
$source = ImageCreateFromJpeg($name);
ImageCopyResized ($out, $source,0,0,0,0,$width1,$height1,$Image[0],$Image[1]);
ImageJpeg($out, $nameNew, 50);