2014-01-14 27 views
3

我有這樣的代碼:圖片是不是有效的JPEG

$image = imagecreatefromjpeg($filename); 
$size = getimagesize($filename, $info); 

var_dump($image); 
var_dump($size); 

我收到這樣的輸出:

Warning: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error 
Warning: imagecreatefromjpeg(): 'my_image.jpg' is not a valid JPEG file 

bool(false) 

array(7) { 
    [0]=> 
    int(22) 
    [1]=> 
    int(30) 
    [2]=> 
    int(2) 
    [3]=> 
    string(22) "width="22" height="30"" 
    ["bits"]=> 
    int(8) 
    ["channels"]=> 
    int(3) 
    ["mime"]=> 
    string(10) "image/jpeg" 
} 

我得到了警告,該圖像是不是一個有效JPEG文件和唐't加載該文件,但getimagesize說這是JPEG文件(MIME類型)。發生了什麼,我該如何解決這個問題?

我嘗試這樣做,但它並沒有幫助我:

  1. 檢查* memory_limit的*在php.ini文件在磁盤
  2. 檢查空間
  3. 集* gd.jpeg_ignore_warning *

有趣的是,在本地服務器上一切正常(當然有相同的圖像)。

+0

你確定文件被找到了嗎?嘗試使用圖像的絕對路徑進行測試(通過錯誤消息,看起來您可能正在使用相對路徑),並確保您的腳本可以找到它。 –

+1

只是一個猜測,但'getimagesize()'不可能解析所有數據(它可能跳過一些部分),而'imagecreatefromjpeg'解析所有數據。 – ComFreek

+2

是否爲正確的jpeg圖像?可以這[鏈接](http://stackoverflow.com/questions/3901455/the-dreaded-warning-imagecreatefromjpeg-tmp-filename-is-not-a-valid-jpe)幫助嗎? –

回答

1

創建函數isPNG

<?php 

function isPNG($file){ 
    return preg_match('/'.quotemeta('PNG').'/i', file_get_contents($file)); 
} 

?> 

編輯代碼

<?php 

    if(preg_match('/\.(png)$/i', $filename) || isPNG($filename)){ 
     $image = imagecreatefrompng($filename); 
    }else{ 
     $image = imagecreatefromjpeg($filename); 
    } 

    $size = getimagesize($filename, $info); 

    var_dump($image); 
    var_dump($size); 
?> 

祝你好運!

相關問題