1

我有一个调整上传图像大小的脚本。它适用于 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);
    }  
}
4

3 回答 3

0

我认为您不需要在从 gif 创建图像后输出图像 -imagecreatefromgif将图像读入内存,您应该能够做到这一点:

$src = imagecreatefromgif($file);
$dst = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); 
imagejpeg($dst, $jpgfile);
于 2013-11-13T01:38:06.367 回答
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);
于 2013-11-13T03:32:32.700 回答
0

您使用的是什么版本的 GD 库?根据官方 PHP 文档

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

于 2013-11-13T01:43:14.473 回答