我有这个代码,我已经尝试创建,不知道我做错了什么。
// 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
只返回true
或false
。它只是将源图像的一部分复制到不同的目标资源。它本身不返回资源!
。正确的工作流程是:
- 检查上传的文件,如果它适合你(你做得很好,看起来)。
- 用
imagecopyresized
打开上传的文件创建$img
GD资源。 - 用
imagecreatetruecolor
创建一个空的目标资源$newImg
- 使用
imagecopyresized
或imagecopyresampled
调整大小或重新采样将源图像复制到目标资源。 - 使用
imagegif
将目标资源保存为GIF文件 - 丢弃临时上传的源图片。
你可以通过谷歌搜索php gd resize上传的图像来了解更多。大量的教程将是一个点击远离你。
代码本身看起来不错,但是可能有很多原因导致它失败。一些调试输出将是有帮助的。一些通用的指针:
- 检查
tmp_name
的路径是否设置且可读 - 检查
post_max_size
的php设置,它可能被设置得很低或根本没有设置。 - 在你的代码中,你只处理gif类型的图像(
imagecreatefromgif
),你可能需要在从图像资源 读取之前检查文件类型 - 检查GD是否正确安装在php安装中(php脚本中的
phpinfo();
或命令行中的php -i
应显示为已激活)
令人难过的是,添加一些错误信息到您的输出,这样我们可以进一步帮助。