klappt eigentlich ganz gut, allerdings braucht php für das Anlegen des Bildes im RAM doch gut Platz, vor allem wenn's direkt aus 'ner guten DigiCam stammt.
Naja, ich poste es einfach mal und wer Verwendung dafür hat, der möge es nutzen.

Code: Alles auswählen
<?
/*
Bildskalierung
mit direkt ausgabe an den Browser oder als File gespeichert.
Konvertierung: jpg oder png (gif tut seit einiger Zeit nimmer, wegen Lizensierungs-Problematik)
Parameter
$img : Gültigest image Resource Handle
$width : Zielbreite
$height : Zielhöhe
$keep : Aspekt-Ratio beibehalten (optional, default: ja)
$url : Dateiname des skalierten Bildes (optional, default: images/thumb)
$passout : Direktausgabe an Browser (optional, default: nein)
$type : Bildtyp "jpg" oder "png" (optional, default: jpg)
*/
function drawImgResized($img,$width,$height,$keep = 1,$url="images/thumb",$passout=0,$type="jpg"){
//original Bildgröße abgreifen
$origW = ImageSX($img);
$origH = ImageSY($img);
//neuen Bildcontainer bauen
$retImg = @ImageCreate($width,$height);
//transparenz-farbe allokieren (rgb, momentan magenta)
$alphaCol = @ImageColorAllocate($retImg,195,0,128);
//
$tc = @ImageColorAllocate($retImg,255,0,0);
//seitenverhältnis beibehalten?
if($keep){
if ($origW > $origH){
$scale = $width / $origW;
} else {
$scale = $height / $origH;
}
//auf "pixel" runden
$nwidth = round($origW * $scale);
$nheight = round($origH * $scale);
$newx = round(($width - $nwidth) / 2);
$newy = round (($height - $nheight) / 2);
// originalbild skaliert in container Drücken
@imagecopyresampled($retImg, $img, $newx, $newy, 0, 0, $nwidth, $nheight,$origW ,$origH );
} else {
//originalbild unskaliert in container
@imagecopyresampled($retImg, $img, 0, 0, 0, 0, $width, $height,$origW ,$origH );
}
//transparenz setzen (geht nur für png.. jpg kann net transparent)
imagecolortransparent ($retImg, $alphaCol);
//dateiname ermitteln
$nurl = $type=="jpg"?$url.".jpg":$url.".png";
//als datei schreiben (weil, will der entwicker, oder geht net anders)
if($passout ==0 || headers_sent()){
($type=="jpg")?imagejpg($retImg,$url."jpg"):imagePng($retImg,$url.".png");
ImageDestroy($img);
ImageDestroy($retImg);
return $nurl;
} else {
//direktausgabe and den Browser, ohne speichern
$type=="jpg"? header("Content-type: image/jpeg"):header("Content-type: image/png");
($type=="jpg")?imagejpg($retImg):imagePng($retImg);
}
}
?>
Da ich des aber schon mal geschrieben hatte, dacht ich mir, ich könnt's einfach mal als ansatz einbrigen.
Also, net als "ultima ratio" falsch verstehen, bitte

GreeZ