繁体   English   中英

PHP PNG图片上传失去透明度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM