2016-12-06 18 views
1

Ich benutze PHP, um einen .png-Datei-Upload zu verarbeiten, der abgeschnitten und dann hochgeladen wird. Aus irgendeinem Grund war mein erster Versuch, das Transparente mit Schwarz zu tauschen. Nachdem ich mehrere Stack-Überlauf-Fragen gelesen und Lösungen versucht habe, bin ich nun an der Stelle, wo die Datei hochgeladen wird, aber nicht lesbar ist und 0 Bytes. Was läuft falsch? (Ich folge genaue Antworten von anderen Fragen ...)Zuschneiden und Hochladen von PNG-Dateien zum Erstellen unlesbarer Dateien

Die Jpeg arbeitet ganz gut, die .png nicht so

-Code Ich bin mit:

$dest_image = ImageCreateTrueColor($target_width, $target_height); 

     switch ($search->found_extension()) { 
      case 'PNG': 
      case 'png': 
       imagealphablending($dest_image, false); 
       imagesavealpha($dest_image, true); 
       $source_image = imagecreatefrompng($image); 

       $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127); 
       imagefilledrectangle($dest_image, 0, 0, $target_width, $target_height, $transparent); 

       imagecopyresampled($dest_image, $source_image, 0, 0, $x, $y, $target_width, $target_height, $w, $h); 
       header('Content-type: image/png'); 
       imagepng($dest_image, "../../" . $folder . "/" . cleanstring($userdata->id) . $hasher . ".png", $quality); 
      break; 

      case 'jpg': 
      case 'jpeg': 
      case 'JPG': 
      case 'JPEG': 
       imagealphablending($dest_image, false); 
       imagesavealpha($dest_image, true); 
       $source_image = imagecreatefromjpeg($image); 

       imagecopyresampled($dest_image, $source_image, 0, 0, $x, $y, $target_width, $target_height, $w, $h); 
       header('Content-type: image/jpeg'); 
       imagejpeg($dest_image, "../../" . $filename, $quality); 
      break; 
     } 

Versuchte Lösungen :

How do I resize pngs with transparency in PHP?

Resize images with transparency in php

+0

1. Warum geben Sie Header aus, 2. Warum gibt es so große Unterschiede in den Pfaden, die Sie für die PNG- und JPG-Bilder verwenden? 3. Was ist der Rückgabewert von 'imagepng()'? – jeroen

+0

@jeroen Ich dachte, dass die Bild-Header ein Muss beim Speichern einer Datei sind, Unterschied in den Pfaden ist nur wegen der Erweiterungen ".png/.jpg" (wird neu geschrieben, sobald es funktioniert). Wie bekomme ich einen Rückgabewert von 'imagepng()'? Dieser Code wird durch einen Ajax-Aufruf aufgerufen. – NealVDV

+1

Da der AJAX-Aufruf text/html/json zurück erwartet, sollten Sie keinen Image-Header festlegen, sondern nur dann, wenn Sie ein Bild direkt aus dem Skript in den Browser ausgeben möchten. Da Ihr Code ziemlich repetitiv ist, würde ich den gleichen Code für JPGs und PNGs verwenden, so dass Sie leicht eingrenzen können, wo das Problem liegt. – jeroen

Antwort

0

Mit Blick auf die AJAX-Anfrage Antwort sah ich, dass der Fehler durch den Unterschied zwischen imagepng und imagejpeg verursacht wurde, wenn es um den dritten Parameter quality geht.

imagejpeg ist von 0 - 100 (beste Qualität) und imagepng ist 0 - 9 (stark komprimiert).

Verwandte Themen