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