배경 :
이미지를 업로드 할 스크립트가 있습니다. 하나는 원본 이미지를 유지하고 다른 하나는 이미지의 크기를 유지합니다. 1. 이미지 크기 (폭 & 높이)가 최대 치수 내에 있으면 간단하게 "복사"를 UserPics 폴더에 사용합니다. 2. 원래 크기가 최대 크기보다 큰 경우 너비와 높이의 크기를 최대 크기 이내로 조정하려고합니다. 둘 다 폴더에 이미지를 업로드하지만 사례 2에서는 이미지의 크기가 조정되지 않습니다.PHP Image resize - 왜 이미지가 업로드되었지만 크기가 조정되지 않았습니까?
질문
스크립트에 문제가 있습니까?
설정에 문제가 있습니까?
설정
서버 : WAMP 2.0
PHP : 5.3.0
php.ini라고 : GD2 활성화, 메모리 = 128M (1000M을 시도)
시도이 imageTypes 업로드 : 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)")
@ 한스 : 마크 다운 파서의 코드 블록을 표시하십시오. 텍스트를 선택한 다음 ctrl + k를 누르면 텍스트가 "코드 블록"으로 해석되는 4 개의 공백으로 텍스트가 들여 쓰여집니다. – VolkerK