Представьте, что если метод open () бросил исключение игнорировать, перейдите к следующему циклу

Я пытаюсь использовать Представить чтобы сделать серию 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, которую я могу прагматически изменить с помощью пакета?

Спасибо

0

Решение

Для обработки исключения просто используйте 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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]