首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP文件上传-没有透明度的PNG仍然保存所有黑色

PHP文件上传-没有透明度的PNG仍然保存所有黑色
EN

Stack Overflow用户
提问于 2020-08-06 04:30:02
回答 2查看 31关注 0票数 0

我正在编写一个简单的上传脚本,可以上传一个用户指定的图像从他们的计算机到我的服务器。现在它非常简单,但我想解释一下pngsjpg/jpegs。JPG保存得很好,但pngs,无论它们是否透明,都可以保存为完全黑色的图像。我不确定为什么会发生这种情况,但我有一种感觉,这与imagecreatetruecolor有关

代码语言:javascript
复制
  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);
  }
EN

回答 2

Stack Overflow用户

发布于 2020-08-06 05:01:32

好了,找到我的问题了,我的条件是询问$path == 'png',其中$path是整个镜像名称。我需要的是$ext == 'png'。感谢@wiseone让我再看一遍。

票数 1
EN

Stack Overflow用户

发布于 2020-08-06 04:50:01

您正在将png图像保存为jpg,请检查您的if($path == 'png')条件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63273063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档