0

Imagineを使用して、90k 以上の比較的小さなモバイル画像の 250x250 サムネイルをバッチ作成しようとしています。問題は、ループを実行すると、

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 画像ライブラリを提案できますか?

ありがとうございました

4

1 に答える 1

1

例外を処理するには、try-catch.

ライブラリのドキュメントから

ImagineInterface::open() メソッドは、次の例外のいずれかをスローする場合があります。

Imagine\Exception\InvalidArgumentException

Imagine\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);
}
于 2016-10-08T20:08:51.580 に答える