[画像処理][PHP]GDライブラリを使っている際に表示されるエラーへの対処法

PHPのGDライブラリを使っていると稀に以下のようなエラーに出会うことがあります。

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG in /path/to/file.php on line xxx

ネットで調べる限りでは、このエラーはjpgファイルが破損している場合に起きるケースが多いようです。
結論から言うと完全な解決法は見つけることができなかったのですが、私なりの対処法をご紹介します。

解決法

「ファイルが壊れているのであれば、修復してしまえばいい」
というのが解決法です。
なんというか、シンプルな解決法なのですがこれが結果的に一番簡単でした。

大量のファイルを処理する場合であれば少し面倒かもしれませんが、
MacであればImageOptimなどに壊れたファイルを突っ込むと壊れていないjpgになります。
元々壊れているファイルなので見た目がきれいな画像が出来上がる保証はありませんが、jpgファイルという意味では破損はなくなるようです。
(ついでにファイルサイズも小さくなりますが、画質が少し落ちるかな?という印象)

試してはいないですが、ブラウザから使えるJPEGminiなどを利用してもいいのではないかと思います。

修正したファイルであればGDライブラリは正常に動作するようですので、リサイズなりなんなり自由自在というわけです。
元々が破損したファイルなので「画像の半分が見れない!」などということもあるかもしれませんが、
業務などで大量の画像ファイルのリサイズ処理をGDでやる必要が出てきた場合には検討してみてください。
リサイズするだけなら縮小専用でいいような気もしますが。

とりあえず破損したままでも処理を続行

このサイトに書かれていた方法です。
http://www.atyks.org/blog/detail/2011-10-14-9
以下の記述を追加することで処理の実行は進むようです(未確認です。。。)。

ini_set("gd.jpeg_ignore_warning", 1);

おわりに

海外であれば情報はある程度あるのですが、日本語での情報が少ないようだったので簡単にですが紹介しました。
海外記事

株式会社みのモンでは、たくさんの画像を掲載する必要があるようなサイトの構築のご相談もお待ちしております。
上記GDライブラリも必要であれば使いますし、そのサイトにあった方法で構築をいたします。
PHPを使った大規模なシステム開発から、ホームページ(PC・スマホサイト)構築などのご相談はお気軽にどうぞ!
株式会社みのモンのホームページはこちら