2016-05-19 11 views
0

Ich baue eine Wallpaper-Website und daher muss ich in der Lage sein, das Originalbild vor dem Download zu skalieren. Ich habe versucht, diesen Code die Größe des Bildes:Crop Bildgröße ändern mit Hilfe von PHP

//resize and crop image by center 
function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){ 
    $imgsize = getimagesize($source_file); 
    $width = $imgsize[0]; 
    $height = $imgsize[1]; 
    $mime = $imgsize['mime']; 

    switch($mime){ 
     case 'image/gif': 
      $image_create = "imagecreatefromgif"; 
      $image = "imagegif"; 
      break; 

     case 'image/png': 
      $image_create = "imagecreatefrompng"; 
      $image = "imagepng"; 
      $quality = 7; 
      break; 

     case 'image/jpeg': 
      $image_create = "imagecreatefromjpeg"; 
      $image = "imagejpeg"; 
      $quality = 80; 
      break; 

     default: 
      return false; 
      break; 
    } 

    $dst_img = imagecreatetruecolor($max_width, $max_height); 
    $src_img = $image_create($source_file); 

    $width_new = $height * $max_width/$max_height; 
    $height_new = $width * $max_height/$max_width; 
    //if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa 
    if($width_new > $width){ 
     //cut point by height 
     $h_point = (($height - $height_new)/2); 
     //copy image 
     imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new); 
    }else{ 
     //cut point by width 
     $w_point = (($width - $width_new)/2); 
     imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height); 
    } 

    $image($dst_img, $dst_dir, $quality); 

    if($dst_img)imagedestroy($dst_img); 
    if($src_img)imagedestroy($src_img); 
} 

Und dies wird die Resize tun:

resize_crop_image($width, $height, $image_URL, $save_URL) 

Dieser Code funktioniert gut für mich, aber ich möchte nur die Ausgabe an den Browser des Benutzers senden, da Spar Tausende von zusätzlichen Bildern ist nicht möglich. Es gibt Bibliotheken, die ich verwenden kann, aber ich möchte kein Drittanbieter-Snippet verwenden. Gibt es eine Möglichkeit, diesen Code so zu verändern, wie ich es mir wünsche? Danke.

+0

Nicht. Ändern Sie die Größe des Bildes * einmal *, wenn es hochgeladen wird. Erstellen und speichern Sie mehrere Größen. Speicherplatz ist viel billiger und einfacher zu skalieren als On-Demand-CPU-Skalierung. Quelle: Ich habe 24 TB Bilder. – Sammitch

Antwort

0

Geben Sie für Ihre $ image-Funktion kein Zielverzeichnis (null) an, und es wird ein Image-Stream erstellt.

header("Content-type:{$mime}"); 

, dass das Bild an den Benutzer senden sollte

+0

Das war schnell und einfach. Danke John <3 –

+0

Nur 1 letzte Frage ... der Name des Ausgabebildes ist etwas wie download.php, der gleiche Name, den meine PHP-Datei hat. Wie kann ich den ursprünglichen Dateinamen zurückgeben? Muss ich einen anderen Header verwenden? –

+0

Korrekt, ein anderer Header wird den Trick machen: Content-Disposition: Anhang; Dateiname = Dateiname – John

0

Sie müssen nur die richtigen Header setzen und die Ausgabe Echo. Every PHP request "downloads a file" to the browser, more or less. Sie müssen nur angeben, wie der Browser es behandelt. Versuchen Sie also etwas wie:

header("Content-Type: $mime"); 
header("Content-Disposition: attachment; filename=$dst_img"); 
echo $dst_img; 

Das sollte es für Sie tun.

+0

Das war cool Mann, ich war gerade dabei zu fragen, wie man das Bild zwingen kann! Danke vielmals! –