我正在尝试使用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;
任何人都可以帮我指出我的错误..
答案 0 :(得分:3)
无论您输入的文件类型和透明度如何,您都在输出jpg / jpeg" imagejpeg($ oBuffer,$ sFileName); "这是一种不支持透明度的格式。输出到支持透明度的正确文件类型。
答案 1 :(得分:1)
以下是我认为可以解决这个问题的解决方案。
$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指出的那一点。 希望有所帮助。欢呼声。
答案 2 :(得分:0)
您是否尝试过imagecopyresized()
而不是ImageCopyResampled()
?