Bild individuell schneiden mit PHP

CarpeNoctem

Grünschnabel
N'Abend Leute

Wieder mal ne Voranmerkung: Ja, ich habe die Suchfunktion benutzt. Bei dieser Frage wäre ich euch sehr dankbar, wenn ihr mir nebst guten Tipps auch konkrete Lösungsvorschläge geben könntet. Habe mir jetzt schon ne Weile darüber Gedanken gemacht und merke, dass ich zu viel Zeit damit verliere, das Gewünschte auf die Beine zu stellen.

Folgender Sachverhalt:

Mein Abschlussprojekt ist eine Alumni-Homepage für alle Abgänger unseres Jahrgangs. Die Seite als solche steht grosso modo, was ich aber unbedingt auch möchte, ist ein Foto-Upload-Tool. Ich habe mir das auch bereits zusammen gebastelt und es funktioniert einwandfrei - bis auf einen kleinen Haken:

Die Fotos werden auf eine Breite von 130px skaliert, da sie exakt in einen Rahmen (ein Polaroid-Rahmen) passen müssen. Folglich reicht es nicht, dass das Bild einfach auf 130px runter skaliert wird, das Foto muss bewusst auf einen gewissen Abschnitt begrenzt skaliert werden. Folgendes Problem besteht nämlich. Wenn jemand ein Foto mit der Grösse 400 x 300 uploaded und dieses auf eine Breite von 130px skaliert wird, ist ja logischerweise die Höhe verhältnismässig auch kleiner geworden. Die Bilder müssen aber quadratisch 130 x 130 skaliert werden. Ich habe schon so meine Vorstellungen, wie das rein theoretisch klappen müsste, weiss aber nicht wie ich das umsetzen kann. Auf php.net lässt sich die Lösung bestimmt finden, aber ich werde aus den Angaben nicht schlauer.

Wäre echt super, wenn mir jemand konkret weiterhelfen könnte.

Danke vielmal im Voraus!

Nachfolgend noch das bisherige Script:

PHP:
$strFileName = $SESSION_ID.".jpg";
			$strFileTemp = $arrPostFiles['tmp_name'];
			
			//////////SKALIEREN
			$Grafikdatei2 = "$strFileTemp";
			$Grafikdatei = "$strFileTemp";
			$Bilddaten = getimagesize($Grafikdatei);

			$OriginalBreite = $Bilddaten[0];
			$OriginalHoehe = $Bilddaten[1];
			$ThumbnailBreite = 130;
			if($OriginalBreite < $ThumbnailBreite)
			{
				$ThumbnailBreite=$OriginalBreite;
			}
			$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
			$ThumbnailHoehe = intval($OriginalHoehe/$Skalierungsfaktor);
			
				$Originalgrafik = ImageCreateFromJPEG($Grafikdatei);
				$Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
				ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe);
				ImageJPEG($Thumbnailgrafik, $Grafikdatei, 100);

			move_uploaded_file($Grafikdatei, "$pfad/$strFileName");
 
Ich nutze bei meinem Bildupload Service folgende Funktion
PHP:
<?php
function make_jpg($img_src, $img_width, $img_height, $des_src, $quali = 100) {
    $im = imagecreatefromjpeg($img_src);
    list($src_width, $src_height) = getimagesize($img_src);
    if($src_width >= $src_height) {
        $new_image_width = $img_width;
        $new_image_height = $src_height * $img_width / $src_width;
    }
    if($src_width < $src_height) {
        $new_image_height = $img_width;
        $new_image_width = $src_width * $img_height / $src_height;
    }
    $new_image = imagecreatetruecolor($new_image_width, $new_image_height);
    imagecopyresampled($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
    imagejpeg($new_image, $des_src, $quali);
}
?>

Aufrufen tust du dann mit
PHP:
make_jpg("$uploadverzeichnis/$rand_value.$endung", 150, 70, "$uploadverzeichnis/$rand_value.thumb.$endung", 80);

Wo jetzt 150,70 steht musst du deine gewünschte Grösse in Pixel eintragen die 80 gibt die Qualität des bildes an. Musst nur noch alten und neuen Dateinamen eintragen.
Funktioniert super.

Hoffe konnte dir Helfen.
MFG
Funnyzocker
 
Hi CarpeNoctem...

Hm - ich mag mich als Neuling ja nicht unbeliebt machen, aber:
bei dem Skript wird das Bild doch nur gestaucht oder gezerrt, bis es das richtige Ausgabe-Format hat, oder?

Wirkliches zuschneiden geht, soweit ich weiss nur mit einem Bildbearbeitungsprogramm, bei dem Du dir den Auschnitt mittels "Rahmen" selber aussuchen kannst (z.b. mehr vom Hintergrund - den Seiten weg, um die MItte quadratisch zu haben)...

Vielleicht solltest Du den Gästen mitteilen, dass sie ein quadratisches Bild einstellen sollen und für die Grösse das script von funnyzocker einfügen...

Liebe Grüße
Spielkind
 
Zurück