我有这个代码,我尝试创建,但不知道我做错了什么。
// 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>';
}
总是失败我无法调整大小,即使是指向好教程的链接就足够了,
新年快乐!!答案 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
不会返回true
或false
以外的任何内容。它只是将源图像的一部分复制到不同的目标资源。它本身不返回资源!
<强>最后即可。您想要做的正确的工作流程是:
$img
创建imagecopyresized
GD资源打开上传的文件。$newImg
创建一个空的目标资源imagecreatetruecolor
。imagecopyresized
或imagecopyresampled
调整大小或重新取样,以将源图像复制到目标资源。imagegif
将目标资源保存到GIF文件中。您可以通过 php gd调整上传图片等了解更多内容。只需点击一下即可获得大量教程。
答案 1 :(得分:0)
代码本身看起来没问题,但可能有很多原因导致代码失败。一些调试输出会很有帮助。一些通用指针:
tmp_name
的路径是否设置且可读post_max_size
的php设置,可能设置得很低或根本没有设置。imagecreatefromgif
),您可能需要在从图像资源中读取之前检查文件类型phpinfo();
或命令行中的php -i
应该将其显示为已执行)这很难过,请在输出中添加一些错误消息,以便我们进一步提供帮助。