2013-05-22 181 views
0

我想通過PHP上傳圖片。在上傳時,應該調整它的'尺寸和我在我的config [] - array中定義的一樣大,並且它的'文件大小也小於或等於我的config [] - 數組中的預定義值。但不管怎樣,getFileSize()方法總是返回相同的大小,即使在調整圖像大小之後。php filesize()總是返回相同的值

這是我的代碼。解釋如下。

$tries = 0; 
while ($image->getFileSize() > $config['image_max_file_size'] && $tries < 10) { 
    $factor = 1 - (0.1 * $tries); 

    echo $image->getFileSize().PHP_EOL; 
    if (!$image->resize($config['image_max_width'], $config['image_max_height'], $factor)) { 
      return false; 
    } 

    $tries++; 
} 

$圖像的類型是圖片,這是隻是一個包裝類所有樣的功能,我需要與修改圖片的對象。

$ config是我的配置數組,其中包含所有預定義的值。

$嘗試保存允許的嘗試次數。該程序允許調整圖像的大小不超過10次。

getFileSize()經由返回文件大小(路徑

調整大小返回圖像文件大小(maxWidth,maxHeight,因子)圖像調整大小以在上述參數的大小。調整圖片大小後,將結果保存到路徑,即從中讀取文件大小。

我只是張貼調整大小()和getFileSize()方法,因爲它可能會感興趣:

function resize($neededwidth, $neededheight, $factor) { 

    $oldwidth = $this->getWidth($this->file_path); 
    $oldheight = $this->getHeight($this->file_path); 
    $neededwidth = $neededwidth * $factor; 
    $neededheight = $neededheight * $factor; 
    $fext = $this->getInnerExtension(); 

    $img = null; 
    if ($fext == ".jpeg") { 
     $img = imagecreatefromjpeg($this->file_path); 
    } elseif ($fext == ".png") { 
     $img = imagecreatefrompng($this->file_path); 
    } elseif ($fext == ".gif") { 
     $img = imagecreatefromgif($this->file_path); 
    } else { 
     return false; 
    } 

    $newwidth = 0; 
    $newheight = 0; 
    if ($oldwidth > $oldheight && $oldwidth > $neededwidth) { // Landscape Picture 
     $newwidth = $neededwidth; 
     $newheight = ($oldheight/$oldwidth) * $newwidth;  
    } elseif ($oldwidth < $oldheight && $oldheight > $neededheight) { // Portrait Picture 
     $newheight = $neededheight; 
     $newwidth = ($oldwidth/$oldheight) * $newheight; 
    } 

    $finalimg = imagecreatetruecolor($newwidth,$newheight); 
    imagecopyresampled($finalimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight); 

    if ($fext == ".jpeg") { 
     if (!imagejpeg($finalimg, $this->file_path, 100)) return false; 
    } elseif ($fext == ".png") { 
     if (!imagepng($finalimg, $this->file_path, 9)) return false; 
    } elseif ($fext == ".gif") { 
     if (!imagegif($finalimg, $this->file_path)) return false; 
    } else { 
     return false; 
    } 

    imagedestroy($img); 
    return true; 
} 

getFileSize()

function getFileSize() { 

     return filesize($this->file_path); 
} 

謝謝!

+2

'clearstatcache()函數' - http://www.php.net/manual/en/function.clearstatcache.php –

+0

感謝:P其實你是第一個,但不能接受這個答案:S – JustBasti

回答