我正在创建一个网站,我需要使用jQuery缩放脚本。问题是我需要管理员上传的原始文件的4倍大图像。我写的代码是:
$allowedExts = array("jpeg", "jpg");
$extension = end(explode(".", $_FILES["file"]["name"]));
if (in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
$out = "Error: " . $_FILES["file"]["error"] ."<br>";
}
else
{
$fname = "img/" . $_POST["map"] . "." . $extension;
move_uploaded_file($_FILES["file"]["tmp_name"], $fname);
//crear imagen grande
if(file_exists($fname)){
list( $width, $height ) = getimagesize($fname);
$nwidth = $width * 4;
$nheight = $height * 4;
$nimage = imagecreatetruecolor( $nwidth, $nheight );
$image = imagecreatefromjpeg( $fname );
if(imagecopyresampled( $nimage, $image, 0, 0, 0, 0, $nwidth, $nheight, $width, $height)){
$nfname = "img/" . $_POST["map"] . "_big." . $extension;
imagejpeg( $nimage, $nfname, 100 );
}
else{
echo "Failed At re-sizing the image";
}
imagedestroy($image);
imagedestroy($nimage);
}
else{
echo "Can't find the file";
}
$out = $_FILES["file"]["name"] . " has been uploaded sucessfully <br>";
}
}
else
{
$out = "Invalid file (JPG-JPEG Only)<br>";
}
发送文件的表单是:
<form action="handler.php" method="post"
enctype="multipart/form-data">
<label for="file">Surface:</label>
<input type="file" name="file" id="file"><br>
<input type="hidden" name="id" value="2">
<input type="hidden" name="map" value="surf">
<input type="submit" class="buttons" name="submit" value="Submit" onmouseover="butOn(this,true)" onmouseout="butOn(this,false)">
</form> <br><br>
问题在于,当图像上传时,它给了我“重新调整大小”的事情,因此它的imagecopyresampled函数失败了。我也通过echo函数检查了宽度和高度变量,它们都没问题。 GD库也运行良好。
答案 0 :(得分:2)
GD功能的典型问题是它们很快就会达到PHP内存上限。
执行phpinfo()
并检查当前限制。
我建议你把它增加到64M甚至128M。您可以在PHP.ini文件中更改此项,或使用以下命令添加.htaccess文件:
php_value memory_limit 64M
这也可以从.php文件中获取:
ini_set('memory_limit', '64M');
phpinfo()
右侧的列应显示修改后的值。
答案 1 :(得分:0)
解决:事实证明上传的图像已损坏或其他东西,操作系统图像查看器无法打开它