PHP PNG图片上传失去透明度

时间:2014-08-19 12:13:49

标签: php gd

我正在尝试使用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;

任何人都可以帮我指出我的错误..

3 个答案:

答案 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()