图像在php中调整大小?无法让它发挥作用

时间:2011-12-29 15:10:18

标签: php image

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

    // 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>';
    }

总是失败我无法调整大小,即使是指向好教程的链接就足够了,

新年快乐!!

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

修改即可。现在我看到你的代码出现了更多错误。你做不到:

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

由于imagecopyresized不会返回truefalse以外的任何内容。它只是将源图像的一部分复制到不同的目标资源。它本身不返回资源!

<强>最后即可。您想要做的正确的工作流程是:

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

您可以通过 php gd调整上传图片等了解更多内容。只需点击一下即可获得大量教程。

答案 1 :(得分:0)

代码本身看起来没问题,但可能有很多原因导致代码失败。一些调试输出会很有帮助。一些通用指针:

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

这很难过,请在输出中添加一些错误消息,以便我们进一步提供帮助。