【发布时间】:2011-01-26 18:33:17
【问题描述】:
背景
我有一个上传图片的脚本。一个保留原始图像,一个调整图像大小。
1. 如果图像尺寸(宽度和高度)在最大尺寸内,我使用简单的“复制”直接到文件夹 UserPics。
2.如果原始尺寸大于最大尺寸,我想将宽度和高度调整为最大尺寸。
他们都在将图片上传到文件夹中,但是在第二种情况下,图片不会被调整大小。
问题
脚本有问题吗?
设置有问题吗?
设置
服务器:WAMP 2.0
PHP:5.3.0
PHP.ini:启用 GD2,内存=128M(已尝试 1000M)
尝试上传的图像类型:jpg、jpeg、gif 和 png(所有这些都相同)
脚本
if (isset($_POST['adduserpic'])) {
// Check errors on file
if ($_FILES["file"]["error"] > 0) {
echo $_FILES["file"]["error"]." errors<br>";
} else {
$image =$_FILES["file"]["name"];
$uploadedfile = $_FILES["file"]["tmp_name"];
//Uploaded image
$filename = stripslashes($_FILES['file']['name']);
//Read filetype
$i = strrpos($filename,".");
if (!$i) { return ""; }
$l = strlen($filename) - $i;
$extension = substr($filename,$i+1,$l);
$extension = strtolower($extension);
//New picture name = maxid+1 (from database)
$query = mysql_query("SELECT MAX(PicId) AS number FROM userpictures");
$row = mysql_fetch_array($query);
$imagenumber = $row['number']+1;
//New name of image (including path)
$image_name=$imagenumber.'.'.$extension;
$newname = "UserPics/".$image_name;
//Check width and height of uploaded image
list($width,$height)=getimagesize($uploadedfile);
//Check memory to hold this image (added only as checkup)
$imageInfo = getimagesize($uploadedfile);
$requiredMemoryMB = ( $imageInfo[0] * $imageInfo[1] * ($imageInfo['bits'] / 8) * $imageInfo['channels'] * 2.5 ) / 1024;
echo $requiredMemoryMB."<br>";
//Max dimensions that can be uploaded
$maxwidth = 20;
$maxheight = 20;
// Check if dimensions shall be original
if ($width > $maxwidth || $height > $maxheight) {
//Make jpeg from uploaded image
if ($extension=="jpg" || $extension=="jpeg" || $extension=="pjpeg" ) {
$modifiedimage = imagecreatefromjpeg($uploadedfile);
} elseif ($extension=="png") {
$modifiedimage = imagecreatefrompng($uploadedfile);
} elseif ($extension=="gif") {
$modifiedimage = imagecreatefromgif($uploadedfile);
}
//Change dimensions
if ($width > $height) {
$newwidth = $maxwidth;
$newheight = ($height/$width)*$newwidth;
} else {
$newheight = $maxheight;
$newwidth = ($width/$height)*$newheight;
}
//Create new image with new dimensions
$newdim = imagecreatetruecolor($newwidth,$newheight);
imagecopyresized($newdim,$modifiedimage,0,0,0,0,$newwidth,$newheight,$width,$height);
imagejpeg($modifiedimage,$newname,60);
// Remove temp images
imagedestroy($modifiedimage);
imagedestroy($newdim);
} else {
// Just add picture to folder without resize (if org dim < max dim)
$newwidth = $width;
$newheight = $height;
$copied = copy($_FILES['file']['tmp_name'], $newname);
}
//Add image information to the MySQL database
mysql_query("SET character_set_connection=utf8", $dbh);
mysql_query("INSERT INTO userpictures (PicId, Picext, UserId, Width, Height, Size) VALUES('$imagenumber', '$extension', '$_SESSION[userid]', '$newwidth', '$newheight', $size)")
【问题讨论】:
-
@Hans:请为 markdown 解析器标记代码块,例如通过选择文本然后按 ctrl+k (这会将文本缩进四个空格,然后将其解析为“代码块”)