PHP загрузка файла - PNG без прозрачности сохраняет весь черный цвет - PullRequest
0 голосов
/ 05 августа 2020

Я пишу простой сценарий загрузки, который может загружать изображение, указанное пользователем, со своего компьютера на мой сервер. Сейчас это очень просто, но я хочу учитывать pngs и jpg/jpegs. Файлы JPG сохраняются нормально, но файлы png, независимо от того, имеют они прозрачность или нет, сохраняются как полностью черное изображение. Я не уверен, почему это происходит, но мне кажется, что это как-то связано с imagecreatetruecolor?

  if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
  }
  else {
    $path = $_FILES['file']['name'];
    $uploadedfile = $_FILES['file']['tmp_name'];
    $ext = pathinfo($path, PATHINFO_EXTENSION);

    if ($path == 'png') {
      $src = imagecreatefrompng($uploadedfile);
      imagealphablending($src, true); // setting alpha blending on
      imagesavealpha($src, true); // save alphablending setting (important)
      header('Content-Type: image/png');
    } else {
      $src = imagecreatefromjpeg($uploadedfile);
      header('Content-Type: image/jpeg');
    }


    list($width, $height) = getimagesize($uploadedfile);
    $r = $width / $height;
    if (800/800 > $r) {
      $newwidth = 800*$r;
      $newheight = 800;
    } else {
      $newheight = 800/$r;
      $newwidth = 800;
    }

    $tmp = imagecreatetruecolor($newwidth, $newheight);

    $filename = '../items/' . $_FILES['file']['name'];

    imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    if ($path == 'png') {
      imagepng($tmp, $filename);
    } else {
      imagejpeg($tmp, $filename, 80);
    }

    imagedestroy($tmp);
  }

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Хорошо, обнаружил мою проблему, мое условие запрашивало $path == 'png', где $path было полным именем изображения. Мне было нужно $ext == 'png'. Спасибо @wiseone за то, что заставили меня взглянуть на это еще раз.

0 голосов
/ 05 августа 2020

Вы сохраняете изображение png как jpg, проверьте условие if ($ path == 'png')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...