Я использую PHP для обработки загрузки файла .png, который обрезается, а затем загружается. По какой-то причине моя первая попытка заключалась в замене прозрачного на черный. После прочтения нескольких вопросов переполнения стека и попыток решения я сейчас на этапе загрузки файла, но не читается и 0 байтов. Что происходит не так? (Я имею следующие точные ответы от других вопросов ...)Обрезка и загрузка PNG-файла, создающего нечитаемый файл
.jpeg работает просто отлично, .png не так
код, я использую:
$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;
}
Пробовал решения :
How do I resize pngs with transparency in PHP?
Resize images with transparency in php
1. Почему вы выводите заголовки изображений, 2. Почему существует такая большая разница в путях, которые вы используете для изображений png и jpg, и 3. Какое значение возвращает значение 'imagepng()'? – jeroen
@jeroen Я думал, что заголовок изображения является обязательным при сохранении файла, разница в путях происходит только из-за расширений «.png/.jpg» (будет переписываться после его работы). Как получить возвращаемое значение 'imagepng()'? Этот код вызывается вызовом ajax. – NealVDV
По мере того, как вы будете использовать ajax text/html/json, вы не должны устанавливать заголовок изображения, вы делаете это только тогда, когда хотите вывести изображение непосредственно из сценария в браузер. Поскольку ваш код довольно повторяющийся, я бы использовал тот же код для jpg и png, чтобы вы могли легко сузить, где проблема. – jeroen