etherius Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 Huhu allerseits, ich arbeite gerade an einem recht umfangreichen kundenprojekt bei dem folgendes passieren soll: ich habe eine definierte Fläche (Rahmen) in die ein Bild hineingeladen werden soll. Sagen wir die Fläche ist 150x80 pixel groß. Ich will jetzt ein Bild von der Größe 1024x768 in diesen Rahmen rein setzen. also rechne ich den verkleinerungsfaktor anhand der längeren bildseite aus: 150/1024 = 0,146484375 Neue Breite ist also: 768*0,146484375 = 112,5 112,5 ist aber zu groß um in meinen Rahmen mit 80px Höhe rein zu passen. Hat jemand eine Idee wir ich das Bild so resized kriege dass es in den Rahmen passt? Ich verzweifle da grad dran mein aktueller code: private function _resizeItemImage($image,$width,$height,$dest_width,$dest_height) { if ( $height==$dest_height && $width==$dest_width ) { return $image; } $dest = imagecreatetruecolor($dest_width,$dest_height); $bg = imagecolorallocate ($dest, 255, 255, 255); imagefill($dest, 0, 0, $bg); if ( $height<$dest_height && $width<$dest_width ) { // bild passt in den rahmen WORKS $pos_x = round($dest_width/2 - $width/2); $pos_y = round($dest_height/2 - $height/2); imagecopy($dest,$image,$pos_x,$pos_y,0,0,$width,$height); return $dest; } // bild ist irgendwo zu groß für den rahmen if ( $height>$dest_height && $width<=$dest_width) { // breite passt, wir müssen aber trotzdem runter rechnen, weil die höhe nicht passt $factor = $dest_height/$height; } elseif ($width>$dest_width && $height<=$dest_height ) { // höhe passt, wir müssen aber trotzdem runter rechnen, weil die breite nicht passt $factor = $dest_width/$width; } else { if ( $height > $width ) { $factor = $dest_height/$height; if ( ($width*$factor)>$dest_width ) { // zielbild wird nicht passen, muss noch kleiner } } else { $factor = $dest_width/$width; } } $new_width = $width * $factor; $new_height = $height * $factor; $pos_x = round($dest_width/2 - $new_width/2); $pos_y = round($dest_height/2 - $new_height/2); imagecopyresampled($dest,$image,$pos_x,$pos_y,0,0,$new_width,$new_height,$width,$height); header('Content-Type: image/jpeg'); imagejpeg($dest); exit; return $dest; } [/PHP] die bildausgabe ist da testhalber drin ... gruß Jan
geloescht_JesterDay Geschrieben 9. Mai 2007 Geschrieben 9. Mai 2007 etherius schrieb: ich habe eine definierte Fläche (Rahmen) in die ein Bild hineingeladen werden soll. Sagen wir die Fläche ist 150x80 pixel groß. 150x80 ist kein 4:3 Format. Kein Wunder dass 1024x768 sich nicht einfach so verkleinern läßt Allgemein: Bestimme das Verkleinerungsverhältnis für die Höhe und die Breite und prüf ob die Verkleinerung nach der Breite reicht, und wenn nicht (wie in deinem Beispiel) Verkleiner das Bild nach dem anderen Verhältnis.
etherius Geschrieben 9. Mai 2007 Autor Geschrieben 9. Mai 2007 Habs endlich hinbekommen: Ich gucke ob die verkleinerten Dimensionen in die eine Richtung immer noch zu groß sind und rechne den faktor einfach nochmal runter. trotzdem danke @JesterDay private function _resizeItemImage($image,$width,$height,$dest_width,$dest_height) { if ( $height==$dest_height && $width==$dest_width ) { return $image; } $dest = imagecreatetruecolor($dest_width,$dest_height); $bg = imagecolorallocate ($dest, 255, 255, 255); imagefill($dest, 0, 0, $bg); if ( $height<$dest_height && $width<$dest_width ) { // bild passt in den rahmen WORKS $pos_x = round($dest_width/2 - $width/2); $pos_y = round($dest_height/2 - $height/2); imagecopy($dest,$image,$pos_x,$pos_y,0,0,$width,$height); return $dest; } // bild ist irgendwo zu groß für den rahmen if ( $height>$dest_height && $width<=$dest_width) { // breite passt, wir müssen aber trotzdem runter rechnen, weil die höhe nicht passt $factor = $dest_height/$height; } elseif ($width>$dest_width && $height<=$dest_height ) { // höhe passt, wir müssen aber trotzdem runter rechnen, weil die breite nicht passt $factor = $dest_width/$width; } else { if ( $height > $width ) { $factor = $dest_height/$height; if ( ($width*$factor)>$dest_width ) { // zielbild wird nicht passen, muss noch kleiner $factor = $factor * (($width*$factor)/$dest_width); } } else { $factor = $dest_width/$width; if ( ($height*$factor)>$dest_height ) { // zielbild wird nicht passen, muss noch kleiner $factor = $factor * ($dest_height/($height*$factor)); } } } $new_width = $width * $factor; $new_height = $height * $factor; $pos_x = round($dest_width/2 - $new_width/2); $pos_y = round($dest_height/2 - $new_height/2); imagecopyresampled($dest,$image,$pos_x,$pos_y,0,0,$new_width,$new_height,$width,$height); return $dest; } [/PHP]
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden