PHP:imagecopyresampled返回false和URL

时间:2011-12-13 15:35:21

标签: php

我正在尝试编写一个简单的文件上传器,可以根据需要调整图像大小并将其复制到服务器的文件系统中。如果我直接传递文件但是我也希望能够通过GET参数传递URL,那么这是有效的。而且某种程度上,imagecopyresampled似乎失败了。

这是我的代码:

if(isset($_FILES["file"]))
    $fn = $_FILES['file']['tmp_name'];
else
    $fn = urldecode($_GET['url']);
$fileMD5 = md5_file($fn);
$target = $basedir . $fileMD5 . ".png";
list($width, $height, $imgtype) = getimagesize($fn);
if ($imgtype == IMAGETYPE_PNG)
    $img = imagecreatefrompng($fn);
else if ($imgtype == IMAGETYPE_JPEG)
    $img = imagecreatefromjpeg($fn);
else if ($imgtype == IMAGETYPE_GIF)
    $img = imagecreatefromgif($fn);
else if ($imgtype == IMAGETYPE_BMP)
    $img = imagecreatefromwbmp($fn);
else {
    echo "unsupported file format";
        return;
}
// image resize
if($width > $maxwidth && $width >= $height) {
    $newwidth = $maxwidth;
    $newheight = ($height / $width) * $newwidth;
} else if($height > $maxheight) {
    $newheight = $maxheight;
    $newwidth = ($width / $height) * $newheight;
}
$tmp = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagepng($tmp, $target);

在imagecopyresampled之前,一切似乎都能正常工作。我得到了正确的IMAGETYPE,并且使用imagecreatetruecolor创建了一些东西。但imagecopyresampled返回false。我很困惑,因为脚本似乎能够实际读取图像并获得它的第一位以确定它的类型。 什么是错误的暂停?

提前致谢。

1 个答案:

答案 0 :(得分:5)

您的调整大小部分似乎忽略了一些可能导致未定义的$newheight$newwidth的情况。

您确定imagecreatetruecolor返回图片吗?