[英]PHP PNG Image Upload losing transparency
我正在尝试使用php GD函数上传图像,并且我发现了许多解决方案,可以正确地上传图像而不丢失透明度。 我尝试使用它们中的大多数,但是由于某种原因,我每次都失败了。 我的代码是
switch($ext) {
case 'PNG':
case 'png':
$oImage = imagecreatefrompng($sFileName);
break;
case 'GIF':
case 'gif':
$oImage = imagecreatefromgif($sFileName);
break;
default:
$oImage = imagecreatefromjpeg($sFileName);
break;
}
$kW = $aSize[0] / $params['size']['width'];
$kH = $aSize[1] / $params['size']['height'];
if($kW > $kH) {
$w1 = round($params['size']['width'] * $kH);
$h1 = $aSize[1];
}
else {
$w1 = $aSize[0];
$h1 = round($params['size']['height'] * $kW);
}
$oBuffer = ImageCreateTrueColor($params['size']['width'], $params['size']['height']);
ImageCopyResampled($oBuffer, $oImage, 0, 0, 0, 0, $params['size']['width'], $params['size']['height'], $w1, $h1);
if(file_exists($sFileName)) {
unlink($sFileName);
}
imagejpeg($oBuffer, $sFileName);
// Also tried
imagepng($oBuffer, $sFileName);
return $sFilename;
谁能帮我指出我的错误..
无论输入的文件类型和透明度如何,您都将输出jpg / jpeg“ imagejpeg($ oBuffer,$ sFileName);”,该格式不支持透明度。 输出为支持透明性的适当文件类型。
我认为这是可以解决您问题的解决方案。
$oBuffer = ImageCreateTrueColor($params['size']['width'], $params['size']['height']);
imagealphablending($oBuffer, false);
imagesavealpha($oBuffer, true);
imagealphablending($oImage, true);
imagecopyresampled($oBuffer, $oImage, 0, 0, 0, 0, $params['size']['width'], $params['size']['height'], $w1, $h1);
if(file_exists($sFileName)) {
unlink($sFileName);
}
imagepng($oBuffer, $sFileName);
chmod($sFileName, 0777);
return $sFileName;
请注意,我已经使用过两次imagealphablending以及DMSJax指出的要点。 希望能有所帮助。 干杯。
您是否尝试过imagecopyresized()
而不是ImageCopyResampled()
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.