Я пытаюсь использовать Представить чтобы сделать серию 250×250 миниатюр из более чем 90k + сравнительно небольших мобильных изображений. Проблема в том, что когда я запускаю цикл,
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, которую я могу прагматически изменить с помощью пакета?
Спасибо
Для обработки исключения просто используйте try-catch
,
Из библиотеки документация
Метод ImagineInterface :: open () может выдавать одно из следующих исключений:
Представьте \ Exception \ InvalidArgumentException
Представьте \ Exception \ 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);
}
Других решений пока нет …