Hauptmenü

Werkzeuge

Kategorien

Archiv

Bilder bei Upload automatisch auf maximale Auflösung begrenzen mit PHP

Erstellt in PHP am 17. Oktober 2023 vom Daschmi

In der modernen Web-Entwicklung ist das Hochladen von Bildern eine alltägliche Anforderung. Aber wie können wir sicherstellen, dass die hochgeladenen Bilder die richtige Größe haben, um sowohl den Speicherplatz als auch die Ladezeit zu optimieren? In diesem Blog-Beitrag werden wir einen einfachen, aber robusten PHP-Code vorstellen, der nicht nur ein Bild auf den Server lädt, sondern auch seine Abmessungen überprüft und anpasst.

Die Funktion verwendet die PHP-GD-Bibliothek, um die Abmessungen des hochgeladenen Bilds zu erfassen und es bei Bedarf zu skalieren. Falls während des Vorgangs ein Fehler auftritt, fällt die Funktion auf den herkömmlichen move_uploaded_file()-Ansatz zurück, um sicherzustellen, dass der Upload nicht fehlschlägt.

try {
						
	$is = getimagesize($_FILES[$field]['tmp_name']);
	if (!$is) throw new \Exception();
	
	list($width, $height) = $is;
	
	if (!is_numeric($width) || $width <= 0) throw new \Exception();
	if (!is_numeric($height) || $height <= 0) throw new \Exception();
	
	$image = imagecreatefromstring(file_get_contents($_FILES[$field]['tmp_name']));
	if ($image === false) throw new \Exception();
	
	$max_width = 1024; $max_height = 768;
	$ratio = min($max_width / $width, $max_height / $height);
	
	$new_width = $width * $ratio; $new_height = $height * $ratio;
	
	$new_image = imagecreatetruecolor($new_width, $new_height);
	if ($new_image === false) throw new \Exception();
	
	$b = imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	if ($b === false) throw new \Exception();
	
	$b = imagejpeg($new_image, $path.$filename, 75);
	if ($b === false) throw new \Exception();
	
	imagedestroy($image);
	imagedestroy($new_image);
	
} catch (\Exception $e) {
	
	// Bild alternativ hochladen
	move_uploaded_file($_FILES[$field]['tmp_name'], $path.$filename);
	
}