2012-07-07 100 views
0

如何在上傳後檢測損壞的圖像?如何在上傳後檢測損壞或崩潰的圖像

進出口使用像這樣的代碼:

$imageSize = getimagesize($tmp_name); 
if(!$imageSize || !in_array($imageSize['mime'], $allowMimeType)){ 
    $this->error = 'Bad Image'; 
    @unlink($tmp_name); 
    return false; 
} 
$tn = imagecreatetruecolor(80, 80); 
switch ($imageSize['mime']){ 
    case 'image/jpeg': 
     $userphoto = imagecreatefromjpeg($tmp_name);// Error 1 
    break; 
    case 'image/png': 
     $userphoto = imagecreatefrompng($tmp_name);// Error 1 
    break; 
    case 'image/gif': 
     $userphoto = imagecreatefromgif($tmp_name);// Error 1 
    break; 
    case 'image/bmp': 
     $userphoto = imagecreatefromwbmp($tmp_name);// Error 1 
    break; 
    default: 
     $this->error = 'unknown image'; 
     @unlink($tmp_name); 
     return false; 
    break; 
} 
imagecopyresampled($tn, $userphoto, 0, 0, 0, 0, 80, 80, $width, $height);// Error 2 
imagejpeg($tn,'images/userphoto/'.$this->username.'.jpg',100); 
chmod('images/userphoto/'.$this->username.'.jpg', 0777); 
@unlink($tmp_name); 
USERPROFILE::updatePhotoByUsersId($this->username.'.jpg', $this->users_id); 

但有些時候我給2誤差串聯,

  1. 在這個有意見// Error 1

imagecreatefromwbmp線() [href ='function.imagecreatefromwbmp'> function.imagecreatefromwbmp]:>'images/userphoto/4ff7db9800871。 BMP」不是有效的WBMP文件

imagecreatefromgif()[HREF = 'function.imagecreatefromgif'> function.imagecreatefromgif]:> '圖像/ usersphoto/4fe70bb390758' 是不是一個有效GIF文件

  1. 在註釋行// Error 2

    imagecopyresampled():提供的參數是不是有效的圖像資源

我認爲它的出現因爲上傳過程中文件已損壞。如果我是對的,我該如何解決這個問題?如果不是,原因是什麼?

+0

谷歌搜索:ffmpeg php – Leo 2012-07-07 09:53:22

+0

@Leo它可以幫助我嗎?我無法找到任何有關ffmpeg的信息,對音頻和視頻有幫助 – Hamidreza 2012-07-07 10:20:07

回答

2

在做任何進一步處理之前,您應該檢查getimagesize()的返回值。

如果getimagesize()返回FALSE,這意味着它已失敗,並且該文件有問題,因此您應該終止。圖像通過此檢查後,您可以繼續處理。

至於爲什麼你得到supplied argument is not a valid Image resource,該交代很簡單:最有可能的,存儲在$userphoto的圖像實際上FALSE因爲imagecreatefrompng()imagecreatefrom功能都失敗的原因是,返回FALSE

解決方案:在繼續操作之前,請檢查上傳的圖像是否與getimagesize()一致。

一些可能的原因,爲什麼上傳是失敗的:當它們被寫入到臨時目錄

  • 東西被破壞的圖像。
  • 用戶正在上傳損壞的文件。

關於imagecreatefromwbmp()失敗,那是因爲GD不支持BMP文件。您需要將BMP轉換爲gd可以使用的格式。例如,您可以使用bmp2png

+0

我已經檢查了什麼'$ imageSize = getimagesize($ tmp_name);'return,我改變了我的帖子 – Hamidreza 2012-07-07 10:02:45

+0

你可以'var_dump($ tn)'和'var_dump($ userPhoto)'看看它返回的是什麼? – F21 2012-07-07 10:11:04

+0

不,該錯誤因用戶錯誤而丟失。 – Hamidreza 2012-07-07 10:17:49