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
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
@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
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