2016-12-06 6 views
1

Я использую 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

+0

1. Почему вы выводите заголовки изображений, 2. Почему существует такая большая разница в путях, которые вы используете для изображений png и jpg, и 3. Какое значение возвращает значение 'imagepng()'? – jeroen

+0

@jeroen Я думал, что заголовок изображения является обязательным при сохранении файла, разница в путях происходит только из-за расширений «.png/.jpg» (будет переписываться после его работы). Как получить возвращаемое значение 'imagepng()'? Этот код вызывается вызовом ajax. – NealVDV

+1

По мере того, как вы будете использовать ajax text/html/json, вы не должны устанавливать заголовок изображения, вы делаете это только тогда, когда хотите вывести изображение непосредственно из сценария в браузер. Поскольку ваш код довольно повторяющийся, я бы использовал тот же код для jpg и png, чтобы вы могли легко сузить, где проблема. – jeroen

ответ

0

Глядя на ответ запроса ajax, я увидел, что ошибка была вызвана разницей между imagepng и imagejpeg, когда речь идет о третьем параметре quality.

imagejpeg от 0 до 100 (лучшее качество) и imagepng - 0 - 9 (с высокой степенью сжатия).