Určitě jste už někde na internetu potkali dynamické galerie, kde jste nahráli obrázek a hned jste mohli vidět jeho náhled. Díky PHP a knihovně GD jsou takovéto náhledy docela jednoduchou záležitostí.
Nejdříve vrátíme hlavičku obrázku, aby prohlížeč vrátil soubor jako obrázek, v našem případě vrátíme obrázek jako JPEG a stejně tak tento skript bere jen souboru ve formátu JPEG.
Je dobré ošetřit stav, kdy obrázek, ze kterého chceme udělat náhled neexistuje. Pokud neexistuje vypíšeme tuto skutečnost na náhled. Pokud obrázek existuje, vytvoříme z něj funkcí ImageCreateFromJPEG nový obrázek, který následně vložíme do náhledu a zmenšíme (ImageCopyResized) do námi chtěných rozměrů.
<?php
Header("Content-type: Image/jpeg");
$img="obrazek.jpg";
$width = 130;
$height = 96;
if (!file_exists($img)){
$Im1 = ImageCreate($width,$height);
$bgc = imagecolorallocate ($Im1, 255, 255, 255);
$tc = imagecolorallocate ($Im1, 0, 0, 0);
imagefilledrectangle ($Im1, 0, 0, 150, 30, $bgc);
imagestring ($Im1, 1, 5, 5, "Obrázek není", $tc);
imagestring ($Im1, 1, 5, 15, "k dispozici", $tc);
imageline ($Im1, 0, $height/2, $width, $height/2, $tc);
}else{
$Im2 = ImageCreateFromJPEG("data/images/$img");
if(ImageSX($Im2)>ImageSY($Im2))
{
$pomer=ImageSY($Im2)/ImageSX($Im2);
$sirka=$width;
$vyska=$width*$pomer;
$posun_dolu=($height-$vyska)/2;
$posun_doprava = 0;
}else
{
$pomer=ImageSX($Im2)/ImageSY($Im2);
$sirka=$height*$pomer;
$vyska=$height;
$posun_dolu= 0;
$posun_doprava = ($width-$sirka)/2;
}
$Im1 = ImageCreateTrueColor($sirka,$vyska);
imagefilledrectangle ($Im1, 0, 0, $width, $height, $White);
ImageCopyResized($Im1,$Im2,0,0,0,0,$sirka, $vyska,ImageSX($Im2),ImageSY($Im2));
}
ImageJpeg($Im1);
Destroy($Im1);
Destroy($Im2);
?>
Příspěvek vyšel ve Čtvrtek 2.11.2006 09:50 v kategorii Programování a byl 8473x zobrazen. Pokud se vám líbil můžete si jej zalinkovat: Linkuj.cz, Del.icio.us
ahoj,
diky za skript... jen mam dotaz - zmensene obrazky maji celkem nic moc kvalitu. da se nejak zlepsit? napr. pouzitim nejake jine funkce?
diky predem za odpoved
Jedinou možností, kou znám, jak ovlivnit kvalitu fotky je u funkce imagejpeg () natavit všechny 3 parametry, první parametr je daný obrázek, který máme v proměnné $Im1. Druhým parametrem je název vráceného souboru např. nahled.jpg a třetím parametrem je procento kvality, které můžete znát z různých programů, tedy můžete zadat číslo od 0 do 100.
a co pouzit misto funkce ImageCopyResized() funkci ImageCopyResampled (). Rekl bych ze budete mit ohodne lepsi vysledek
"A jedeme dál ..." Človíčkův Weblog aneb Michal Horák bloguje. (c) Michal Horák (Človíček webdesign) 2006