在php中调整图像大小?不能让它工作


Image resizing in php? Can't get it to work

我有这个代码,我已经尝试创建,不知道我做错了什么。

    // SET ERROR FLAG
    $error = false;
    // MAKE SURE FILE IS AN IMAGE
    if (!list($width, $height) = getimagesize($_FILES['avatar']['tmp_name'])) {
        $error = true;
    } 
    // MAKE SURE FILE COMES FROM FORM
    if (!is_uploaded_file($_FILES['avatar']['tmp_name'])) {
        $error = true;
    }
    // MAKE SURE FILESIZE IS NOT OVER 1MB
    if (filesize($_FILES['avatar']['tmp_name']) > 1048576) {
        $error = true;
    }
    // TARGER TO SAVE FILE AND CHANGE FILENAME AND FILE TYPE
    $target = 'images/avatars/' . md5($user['id']) . '.gif';
    // IMAGE RATIO AND RESIZING
    $imgRatio = $width / $height;
    if ($imgRatio > 1) {
        $newWidth = 200;
        $newHeight = 200 / $imgRatio;
    } else {
        $newWidth = 200 * $imgRatio;
        $newHeight = 200;
    }
    $imgResized = imagecreatetruecolor($newWidth, $newHeight);
    $newImg = imagecreatefromgif($_FILES['avatar']['tmp_name']);
    $newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    // SUCCESSFULL IMAGE UPLOAD
    if (!$error && move_uploaded_file($newImg, $target)) {
        echo '<p>Your avatar was uploaded successfully.</p>';
        // ERROR UPLOADING IMAGE
    } else {
        echo '<p>There was an error uploading your avatar.</p>';
    }

它总是失败,我不能让调整大小的工作,甚至一个链接到一个好的教程就足够了,

新年快乐!

我认为问题是您使用GD打开临时图像文件:

$newImg = imagecreatefromgif($_FILES['avatar']['tmp_name']);
$newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

然后你试着用move_uploaded_file移动临时头像文件,而不释放GD资源,也放弃所有用GD完成的工作(我的意思是调整大小,我可以在这里添加你必须使用resample而不是resize方法)。

if (!$error && move_uploaded_file($newImg, $target)) {

代码将临时上传的文件(当前由GD打开,但未被GD工作物理更改,因此未调整大小)移动到$target路径。

编辑。现在我看到了更多的代码错误。你不能这样做:

$newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

因为imagecopyresized只返回truefalse。它只是将源图像的一部分复制到不同的目标资源。它本身不返回资源!

最后

。正确的工作流程是:

  • 检查上传的文件,如果它适合你(你做得很好,看起来)。
  • imagecopyresized打开上传的文件创建$img GD资源。
  • imagecreatetruecolor创建一个空的目标资源$newImg
  • 使用imagecopyresizedimagecopyresampled调整大小或重新采样将源图像复制到目标资源。
  • 使用imagegif将目标资源保存为GIF文件
  • 丢弃临时上传的源图片。

你可以通过谷歌搜索php gd resize上传的图像来了解更多。大量的教程将是一个点击远离你。

代码本身看起来不错,但是可能有很多原因导致它失败。一些调试输出将是有帮助的。一些通用的指针:

  • 检查tmp_name的路径是否设置且可读
  • 检查post_max_size的php设置,它可能被设置得很低或根本没有设置。
  • 在你的代码中,你只处理gif类型的图像(imagecreatefromgif),你可能需要在从图像资源
  • 读取之前检查文件类型
  • 检查GD是否正确安装在php安装中(php脚本中的phpinfo();或命令行中的php -i应显示为已激活)

令人难过的是,添加一些错误信息到您的输出,这样我们可以进一步帮助。