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


PHP resizing working for PNGs and JPGs but not GIFs

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

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

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

您使用的是哪个版本的 GD 库?根据官方的PHP文档:

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

我最终绕过了将 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);
相关文章: