Zmenšení obrázku v PHP (vhodné například pro náhledy v galeriích (tzv. thumbnaily nebo miniatury))
- Vložil Trupík 3/6/2006 2:15:59 PM
-
Rychlou představu toho, co myslím pod pojmen thumbnail, získáte, pokud si ve
WindowsXP v nějaké složce změníte způsob zobrazování (v anglické verzi View -> Thumbnails,
v české myslím Zobrazit -> Miniatury )
Pokud chcete dávat na web obrázky i s náhledy (thumbnail), měli byste na server ukládat
jejich zmenšené verze právě pro účely thumbnailů.
Je sice pravda, že když chcete na stránce
zobrazit zmenšený obrázek, můžete jeho rozměry upravit atributy width a height tagu img
(které byste měli vždy uvádět), popř. jejich obdobou v CSS skriptu třeba takhle
img
{
width: 80px;
height: 80px;
}
Tím sice dosáhnete toho, že se na stránce zobrazí obrázek zmenšený a ušetříte
tak místo, ale prohlížeč nejdřív musí stáhnout obrázek v plné velikosti
než ho bude moct zmenšený zobrazit. A to může trvat velmi dlouho, pokud
máte už jen pár obrázků v řádu stovek kb.
Zmenšené obrázky si můžete vytvořit sami (třeba pomocí IrfanView nebo Photoshopu) a
na server vždy umísťovat obě verze - zmenšenou i plnou. Při větším počtu obrázků
to ale začne být otrava a pokud chcete, aby obrázky vkládali vaši uživatelé, většina
z nich pravděpodobně ani nepochopí, co po nich chcete, nebo se jim nebude chtít, něco
takového dělat.
Pokud používáte PHP, můžete použít funkci obdobnou této. Podotýkám, že na serveru, na
kterém PHP běží, musí být také funkční GD knihovna (to zjistíte např. funkcí php_info(); - pokud
je knihovna funkční, zobrazí se pro ni kolonka). Naštěstí už je dnes na hostinzích GD knihovna víceméně standard.
Pokud používáte ASP.NET, můžete si návod pro zmenšování obrázků přečíst v mém dalším článku:
Zmenšování obrázků v ASP.NET
<?
function Resizer(
$filename, //cesta k souboru, ktery chcete zmensit
$copypath, //cesta, kam zmenseny soubor ulozit
$MaxWidth, //maximalni sirka zmenseneho obrazku
$MaxHeight) //maximalni vyska zmenseneho obrazku
{
//zjistime puvodni velikost obrazku
list($OrigWidth, $OrigHeight)
= getimagesize($filename);
//hodnota 0 v parametrech MaxWidth resp. MaxHeight znamena,
//ze sirka resp. vyska vysledku muze byt libovolna
if ($MaxWidth == 0)
$MaxWidth = $OrigWidth;
if ($MaxHeight == 0)
$MaxHeight = $OrigHeight;
//nyni vypocitam pomer zmenseni
$pw = $OrigWidth / $MaxWidth;
$ph = $OrigHeight / $MaxHeight;
if ($pw > $ph)
$p = $pw;
else
$p = $ph;
if ($p < 1)
$p = 1;
//v p ted mame pomer pro zmenseni
//vypocitame vysku a sirku zmenseneho obrazku
$NewWidth = (int)$OrigWidth / $p;
$NewHeight = (int)$OrigHeight / $p;
//vytvorime novy obrazek pozadovane vysky a sirky
$image_p = imagecreatetruecolor($NewWidth, $NewHeight);
//otevreme puvodni obrazek se souboru
$image = imagecreatefromjpeg($filename);
//a okopirujeme zmenseny puvodni obrazek do noveho
imagecopyresampled($image_p,
$image, 0, 0, 0, 0,
$NewWidth, $NewHeight,
$OrigWidth, $OrigHeight);
//a ulozime
imagejpeg($image_p, $copypath, 100);
}
?>
Ohodnoťte prosím užitečnost článku