在PHP中调整和保存jpg、png和gif

在PHP中调整和保存jpg、png和gif,php,png,jpeg,gif,image-resizing,Php,Png,Jpeg,Gif,Image Resizing,我在这里找到了Ian Atkin的解决方案--我正在尝试修改它以适应png和gif,并保存调整大小的图像。Jpg可以工作,但我得到了png和gif的黑色图像(大小正确)。我不知道我做错了什么。代码如下: function resize_image($file, $w, $h, $crop=FALSE) { list($width, $height) = getimagesize($file); $r = $width / $height; if ($crop) { if ($width

我在这里找到了Ian Atkin的解决方案--我正在尝试修改它以适应png和gif,并保存调整大小的图像。Jpg可以工作,但我得到了png和gif的黑色图像(大小正确)。我不知道我做错了什么。代码如下:

function resize_image($file, $w, $h, $crop=FALSE) {
list($width, $height) = getimagesize($file);
$r = $width / $height;
if ($crop) {
    if ($width > $height) {
        $width = ceil($width-($width*abs($r-$w/$h)));
    } else {
        $height = ceil($height-($height*abs($r-$w/$h)));
    }
    $newwidth = $w;
    $newheight = $h;
} else {
    if ($w/$h > $r) {
        $newwidth = $h*$r;
        $newheight = $h;
    } else {
        $newheight = $w/$r;
        $newwidth = $w;
    }
}

if($extension=="gif") {
    $src = imagecreatefromgif($file);
} elseif($extension=="png") {
    $src = imagecreatefrompng($file);
} else {
    $src = imagecreatefromjpeg($file);
}

$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

if($extension=="gif") {
    imagegif($dst, $file);
} elseif($extension=="png") {
    imagepng($dst, $file);
} else {
    imagejpeg($dst, $file);
}
return $dst;

}

多谢各位

在编写代码时,应该使用一些合理的格式。正确缩进,避免在单行上有多个命令。它目前看起来很凌乱,很难阅读。抱歉,编辑了它。
if($extension==“gif”)
-变量
$extension
从未定义过,因此这应该会抛出一个“undefined variable”警告,然后总是转到if语句的
else
部分(使用jpeg)哦,对不起,$extension是较早设置的,除了这个功能,我应该提到它,对不起。我确实能识别png和gif文件,并将其保存为png/gif,其尺寸/比例正确。但是它们是黑色的。即使它设置在函数外部,它在函数内部仍然是未定义的。