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

  • 本文关键字:PNG 保存 透明度 文件 PHP php
  • 更新时间 :
  • 英文 :


我正在编写一个简单的上传脚本,可以将用户指定的图像从计算机上传到我的服务器。现在非常简单,但我想说明pngsjpg/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);
}

Ok找到了我的问题,我的条件是要求$path == 'png',其中$path是整个图像名称。我需要的是$ext == 'png'。感谢@wiseone让我重新审视这一点。

如果要将png图像保存为jpg,请检查if($path=='png'(条件

最新更新