PHP – Přepočet rozměrů obrázku podle omezení šířky nebo výšky při zachování poměru stran
(vrací rozměry a HTML atributy)
asi 2013
Jednoduchá PHP funkce, jejímž smyslem je změna velikosti obrázku.
Máte-li obrázek s naprosto libovolným (neznámým a neovlivnitelným) poměrem stran,
a k tomu omezení pro maximální výšku obrázku i pro maximální šířku obrázku, aby se vám obrázek vešel do rozložení webu,
čeká tato funkce právě na vás.
/******Přepočet rozměrů obrázku podle omezení šířky nebo výšky při zachování poměru stran********/ /******Recalculation of size of image by limit for width or height, keeping aspect ratio********/ function new_image_size($width, $height, $maxwidth, $maxheight=0) { // Vstupní parametry: // 2x aktuální velikost obrázku (Ale ve většině případů místo nich můžete použít nativní funkci getimagesize().); // 2x maximální požadovaný rozměr obrázku (0 == bez omezení), můžete vypustit poslední parametr pro maximální výšku (dosadí se 0 == neomezeně) // Na vstupu můžete zadat rozměry obrázku s jakýmkoliv skutečným poměrem stran (poměr stran může být jiný než je poměr nejvyšších mezních rozměrů) // Na vstupu můžete zadat nejvyšší přípustné hodnoty pro šířku, nebo pro výšku, nebo pro obě // Na výstupu dostanete šířku, výšku a XHTML kód s oběma těmi hodnotami // Autor: Martin Adámek, www.adamek.cz, Náchod // Na internetu se vyskytuje mnoho podobných funkcí, ale hledání nějaké stejně univerzální jako je tato by zabralo více času než si tu funkci napsat: if (($maxheight>0)and($maxheight<$height)) { $width = $width*$maxheight/$height; $height = $maxheight; } //Nepoužívejte tady 'elseif' ani 'else'! Funkce je připravená na obrázky s poměrem stran hodně odlišným od poměru horních omezení rozměrů. Takže je možné, že velikost bude opravena už v prvním kroku, ale nebude to stačit, takže bude znovu opravena ve druhém kroku! //Do not use 'elseif' (n)or 'else' here! Function is ready for sizes of image with aspect ratio very different from aspect ratio of limits for size. So it is possible that size will be corrected already in first step, but it will not be enough, so it will be corrected again in second step! if (($maxwidth>0)and($maxwidth<$width)) { $height = $height*$maxwidth/$width; $width = $maxwidth; } return array($width, $height, 'width="'.$width.'" height="'.$height.'"'); }