Server-Side Bildgrößenänderung

Avatar of Chris Coyier
Chris Coyier am

Der Code verwendet PHP, um ein Bild zu skalieren (derzeit nur JPEG). Mit dieser Methode hat das skalierte Bild eine deutlich bessere Qualität als eine skaliere Version im Browser. Die Dateigröße des neuen, verkleinerten Bildes ist ebenfalls kleiner (schneller herunterzuladen).

Der Code besteht aus zwei Teilen

  • imageResizer() wird verwendet, um das Bild zu verarbeiten
  • loadimage() fügt die Bild-URL in einem einfacheren Format ein
<?php

   function imageResizer($url, $width, $height) {

		header('Content-type: image/jpeg');

		list($width_orig, $height_orig) = getimagesize($url);

		$ratio_orig = $width_orig/$height_orig;

		if ($width/$height > $ratio_orig) {
		  $width = $height*$ratio_orig;
		} else {
		  $height = $width/$ratio_orig;
		}

		// This resamples the image
		$image_p = imagecreatetruecolor($width, $height);
		$image = imagecreatefromjpeg($url);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

		// Output the image
		imagejpeg($image_p, null, 100);
		
	}

	//works with both POST and GET
	$method = $_SERVER['REQUEST_METHOD'];
	
	if ($method == 'GET') {

		imageResize($_GET['url'], $_GET['w'], $_GET['h']);
		
	 } elseif ($method == 'POST') {

	    imageResize($_POST['url'], $_POST['w'], $_POST['h']);
	 }

	// makes the process simpler
	function loadImage($url, $width, $height){
         echo 'image.php?url=', urlencode($url) ,
         '&w=',$width,
         '&h=',$height;
	}

?>

Verwendung

Der obige Code würde in einer Datei namens image.php stehen.

Bilder würden so angezeigt werden

<img src="<?php loadImage('image.jpg', 50, 50) ?>"