2013-04-19 41 views
3

我正在創建一個網站,我需要使用jQuery縮放腳本。問題是我需要管理員上傳的原始文件的4倍大圖像。我寫的代碼是:php imagecopyresampled不工作

$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

沒有錯,你的代碼只是增加內存有限..請參閱下面的答案.. – Dinesh

+0

能你在調用'imagecopyresampled()'之前驗證'$ nimage!== FALSE'和'$ image!== FALSE'?同時讓我們知道您正在使用的圖像的大小。爲什麼不把他們的圖片放在網上供他人測試你的代碼? –

回答

0

解決:事實證明,上傳的圖片被打破或東西時,OS圖像瀏覽器無法打開它

2

GD函數的典型問題是它們很快達到PHP內存的上限。

做一個phpinfo()並檢查電流限制。

我建議你把它增加到64M甚至128M。您可以在php.ini文件中更改此或添加.htaccess文件有:

php_value memory_limit 64M 

這也可以從PHP文件:

ini_set('memory_limit', '64M'); 

上的phpinfo()右邊的列應顯示修改後的值。

+0

我使用從64M到512M的值,但仍然無法正常工作 – Arheisel