2016-10-08 6 views
0

Imagineを使用して、90万以上の比較的小さなモバイル画像の250x250サムネイルを一括して作成しようとしています。open()メソッドが例外を無視してから次のループに進む場合を想像してください。

Unable to open image vendor/imagine/imagine/lib/Imagine/Gd/Imagine.php Line: 96

と完全にループを壊す:私はループを実行すると、問題は、例外をスロー、

foreach ($images as $c) { 
    $imagine = new Imagine(); 
    $image = $imagine->open($c); 
    $image->resize(new Box(250, 250))->save($outFolder); 
} 

は時々、イメージが破損しているとopen()方法が失敗しています。 openが失敗したかどうかを確認する手段はありますか?次のようなもの:

foreach ($images as $c) { 
    $imagine = new Imagine(); 
    $image = $imagine->open($c); 
    if ($image) { 
    $image->resize(new Box(250, 250))->save($outFolder); 
    } else { 
    echo 'corrupted: <br />'; 
    } 
} 

希望者がお手伝いします。私が実際にバッチでサイズを変更できるPHPイメージライブラリを提案することはできますか?

だけtry-catchを使用した例外を処理するために、あなたに

答えて

1

ありがとうございます。

ImagineInterface :: open()メソッドは、次のいずれかの例外をスローすることが

documentationライブラリから:

は\例外の\ InvalidArgumentException

想像を想像してみて\例外\ RuntimeException

このようにそれを試してみてください。

$imagine = new Imagine(); // Probably no need to instantiate it in every loop 
foreach ($images as $c) { 
    try { 
     $image = $imagine->open($c); 
    } catch (\Exception $e) { 
     echo 'corrupted: <br />'; 
     continue; 
    } 
    $image->resize(new Box(250, 250))->save($outFolder); 
} 
+0

はありがとうございました!これは実際に例外の私の実際の生命使用です。 –

関連する問題