Jag använder denna fina funktion för att räkna ut proportioner och liknande vid skapande av tumnaglar.
Därmed får man en bild som är ett fast antal pixlar stor där bilden inuti kan ha sina korrekta proportioner men att bilden, layoutmässigt alltid tar upp lika stor plats. Börjar dock lacka på att GD är så dålig på att göra tumnaglar och funderar på att gå över till NetPBM eller ImageMagick
Kod:
function imageresize( $bild, $maxbredd, $maxhojd, $mapp, $bakgrund) {
if(!isset ($bild) || !isset($maxhojd) || !isset($maxbredd) || !isset($mapp) || !isset($bakgrund) ){
exit("Du har utelämnat något vitalt argument i funktionen!<br />
Du bör kalla funktionen med <pre>'imageresize( bildnamn, maxbredd, maxhöjd, målmapp, hexadecimal bakgrundsfärg)'</pre>");
}
if($bakgrund == 0)
$bakgrund="FFFFFF";
$bild_path = "/home/festiz/web/new/images/products/large/" . $bild;
$target_path = "/home/festiz/web/new/images/products/" . $mapp . "/" . $bild;
list($width, $height, $type, $attr) = getimagesize( $bild_path );
error_reporting (E_ALL);
$abc = imagecreatefromjpeg( $bild_path );
$def = imagecreatetruecolor( $maxbredd, $maxhojd );
$ratio = $height/$width;
if ( $ratio<1 )
{
$new_bredd=$maxbredd;
$new_hojd=$new_bredd*$ratio;
} else {
$new_hojd=$maxhojd;
$new_bredd=$new_hojd*$ratio;
}
sscanf($bakgrund, "%2x%2x%2x", $red, $green, $blue);
$stringcolor=ImageColorAllocate($def,$red,$green,$blue);
imagefilledrectangle($def, 0, 0, $maxbredd, $maxhojd,$stringcolor);
imagecopyresized($def, $abc, 0, 0, 0, 0, $new_bredd, $new_hojd, $width, $height);
imagejpeg($def, $target_path, 100);
ImageDestroy($abc);
ImageDestroy($def);
}
Du får använda denna funktion hur du vill och skriva om den hur du vill, även kommersiella projekt går bra då jag betraktar denna kodsnutt som släppt under GPL.