2012-03-30 19 views
1

ユーザーが自分のアプリケーションの壁紙として選択した画像が壊れているかどうかをプログラムでチェックする必要があります....... 基本的には、壁紙として自分のイメージを選んでください。今度は画像が読み込まれると、どういうわけか壊れているかどうかを確認したいだけです...画像が破損しているかどうかを検出する

+0

http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in- javacript –

+1

solutiionはこちら http://stackoverflow.com/questions/6568247/is-there-any-way-to-have-php-detect-a-corrupted-image –

答えて

2

代わりに、JavaScriptソリューションの代わりにPHPソリューションを探している場合は重複は提供されません)、GDのgetimagesize()をPHPで使用して、それが返すものを見ることができます。提供されたイメージ形式が有効でない場合、falseを返し、エラーをスローします。

+0

画像は破損していますが、画像サイズはまだ変わりません。 – Gulshan

3

これは私にとってはうまくいくようです。ここで

<?php 
    $ext = strtolower(pathinfo($image_file, PATHINFO_EXTENSION)); 
    if ($ext === 'jpg') { 
    $ext = 'jpeg'; 
    } 
    $function = 'imagecreatefrom' . $ext; 
    if (function_exists($function) && @$function($image_file) === FALSE) { 
    echo 'bad img file: ' . $image_file . ' ' . $function; 
    } 
?> 
+0

'' 'echo 'bad img file:'にタイプミスがあります。 ' $ image_file。 ''。 $ function); '' ' – aki

+0

*これを代わりに使う:*' $ function = 'imagecreatefrom'。 strtolower($ ext); ' –

2

あなたは、画像の完全なディレクトリ上で実行することができ、それがimagecreatefrom***()テストに基づいて、破損しているファイルが記録されますPHPのCLIスクリプトです。悪質なファイルをログに記録したり、アクションを実行して削除したりできます。

https://github.com/e-ht/literate-happiness

また、あなたが保存されている可能性が画像のパス上の行動を取るために、それをデータベースにプラグインすることができます。ここで

は、それが使用する関数の肉です:

$loopdir = new DirectoryIterator($dir_to_scan); 
foreach($loopdir as $fileinfo) { 
    if(!$fileinfo->isDot()) { 
     $file = $fileinfo->getFilename(); 
     $file_path = $dir_to_scan . '/' . $file; 
     $mime_type = mime_content_type($file_path); 
     switch($mime_type) { 
      case "image/jpg": 
      case "image/jpeg": 
       $im = imagecreatefromjpeg($file_path); 
       break; 
      case "image/png": 
       $im = imagecreatefrompng($file_path); 
       break; 
      case "image/gif": 
       $im = imagecreatefromgif($file_path); 
       break; 
     } 
     if($im) { 
      $good_count++; 
     } 
     elseif(!$im) { 
      $bad_count++; 
     } 
    } 
} 
関連する問題