2016-10-08 56 views
0

我試圖使用Imagine批量製作超過90k +相對較小的移動圖像的250x250縮略圖。問題是,當我運行一個循環,想象一下,如果open()方法拋出異常,忽略然後進入下一個循環

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

有時,圖像被損壞和open()方法失敗,拋出異常:

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

,完全打破了循環。有沒有辦法,檢查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圖像庫,我可以批量實際調整大小?

謝謝

回答

1

處理異常只是使用try-catch

從庫documentation

的ImagineInterface :: open()方法可能會引發以下異常:

想象\異常\ 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

謝謝!這實際上是我第一次真正使用異常。 –

相關問題