ImageCopyResampled: kleinere Bilder zentrieren

splat

Erfahrenes Mitglied
Hallo,

Gibt es eine Möglichkeit verschiedene Bilder, z.b. 320x100, 120x350, usw. auf eine maximale Höhe oder eine maximale Breite (447x443) zu vergrößern (Seitenverhältnis wird beibehalten), und dann den fehlenden Rest der Höhe bzw. der Breite in Weiss auszufüllen? Das Bild sollte natürlich auch zentriert werden.

Bisher bin ich so weit, dass Die Bilder auf die max. Höhe bzw auf die max. Breite vergrößert werden. Allerdings habe ich den restlichen Teil in schwarz, und das Bild ist auch nicht zentriert. Wie kann ich nun diesen Rest in Weiss ausfüllen lassen und das Bild zentrieren? Geht das überhaupt?

PHP:
	$img = GetImageSize ($picture);
	
	if ($img[0] >= $img[1]) {
	# new height X
		$new_x = "447";
		$faktor = $img[0] / $new_x;
		$new_y = $img[1] / $faktor;
	} else {
	# new width Y
		$new_y = "443";
		$faktor = $img[1] / $new_y;
		$new_x = $img[0] / $faktor;
	}
	
	$new_image = imagecreatetruecolor ("447", "443");
	$img_source = ImageCreateFromJPEG ($picture);
	ImageCopyResampled ($new_image, $img_source, 0, 0, 0, 0, $new_x, $new_y, $img[0], $img[1]);

	imagejpeg($new_image, $filename);
	imagedestroy($new_image);

Gruß,
Marc
 
Ich will ja nicht von deinen Vorhaben abhalten, aber vergrößern sollte man die Bilder nicht.
Die Qualität ist dann unter Umständen unter aller Sau ... (sorry).

Die eigentliche Frage ist eher Mathematik :-)
Denk mal ganz genau darüber nach ...
 
Hi,

das die Qualität hier flöten geht, das ist mir schon bewusst. Das stimmt schon so.. :)
Habe es in der Zwischenzeit schon lösen können.
Das mit dem Hintergrund geht jetzt wie folgt:

PHP:
$bgcolor = imagecolorallocate($new_image, 255, 255, 255);
ImageFilledRectangle($new_image, 0, 0, 447 , 443 , $bgcolor);

Und die Zentrierung funktioniert jetzt so:

PHP:
$dest_x = ( 447 / 2 ) - ( $new_x / 2 ); // centered
$dest_y = ( 443 / 2 ) - ( $new_y / 2 ); // centered
	
ImageCopyResampled ($new_image, $img_source, $dest_x, $dest_y, 0, 0, $new_x, $new_y, $img[0], $img[1]);
 
Zurück