PHP调整大小适用于PNG和JPG但不适用于GIF

时间:2013-11-13 01:22:47

标签: php image-processing gif

我有一个调整上传图片大小的脚本。它适用于PNG和JPG,但不适用于GIF。对于GIF,它应该将它们转换为JPG,然后调整它们的大小。转换有效,但随后无法调整大小......

function resize_image($file, $maxWidth, $maxHeight) {
    $jpgFile = substr_replace($file, 'jpeg', -3);
    $fileType = strtolower(substr($file, -3));
    ...
    if ($fileType == 'gif') {
        $test = imagecreatefromgif($file);
        imagejpeg($test, $jpgFile);
        $src = imagecreatefromjpeg($jpgFile);
        $dst = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
        imagejpeg($dst, $jpgfile);
    }  
}

3 个答案:

答案 0 :(得分:0)

我不认为你需要在从gif创建后输出图像 - imagecreatefromgif将图像读入内存,你应该可以这样做:

$src = imagecreatefromgif($file);
$dst = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
imagejpeg($dst, $jpgfile);

答案 1 :(得分:0)

您使用的是哪个版本的GD库?根据{{​​3}}:

  

在版本1.6中从GD库中删除了GIF支持,并添加了   回到版本2.0.28。这些功能在这些功能之间不可用   版本

答案 2 :(得分:0)

我最终绕过了GIF到JPG的转换,并直接调整了GIF的大小。但是,为了保持透明度(默认情况下它将透明背景变为黑色,这是我最初在调整大小之前将其转换为JPG的原因),我不得不添加一些说明。

    $src = imagecreatefromgif($file);
    $dst = imagecreatetruecolor($newWidth, $newHeight);
    imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127));
    imagealphablending($dst, false);
    imagesavealpha($dst, true);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
    imagegif($dst, $file);