GDライブラリがロードされているのにJPG images are not supported

GDライブラリがロードされているのにJPG images are not supported

記事一覧GDライブラリがロードされているのにJPG images are not supported

フレームワークとは直接関係ないですが、Codeigniter で構築しているサイトで画像のリサイズをしようとしたら下記のエラーに遭遇しました。

Your server does not support the GD function required to process this type of image.
JPG images are not supported.

当初は Imagemagic で Exif の削除や画像のリサイズ処理をしようとしていましたが、Codeigniter の標準ライブラリが GD を使って(Imagemagicなどそれ以外の画像ライブラリも使える)画像加工する機能を備えているのでそれを利用しました。

Codeigniterの問題?

最初は Codeigniter の image_lib の設定の問題かと思って、設定項目のドキュメントを見ていましたが、どうやら原因は PHP 側の設定にありそうです。

画像操作クラス : CodeIgniter ユーザガイド 日本語版

PHPの設定?

まずは GD ライブラリの確認をします。最初に so ファイルがモジュールのディレクトリに存在するかチェックします。Amazon Linux で yum のパッケージでインストールした PHP5.5 用のモジュールは下記に存在しました。

$ ls /usr/lib64/php/5.5/modules/gd.so

gd.so

次に、上記の gd.so がロードされているかを確認します。まず、php.ini で読み込んでいるかを確認します。

$ ls /etc/php.d/gd.ini

gd.ini

$ cat /etc/php.d/gd.ini

; Enable gd extension module
extension=gd.so

php クライアントで gd_info() が実行できるか確認します。

$ php -r 'print_r(gd_info());'

Array
(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [T1Lib Support] => 1
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 1
    [XBM Support] => 1
    [JIS-mapped Japanese Font Support] => 
)

この時点で GD ライブラリはロードされて php で使えそうな感じです。

原因はgdライブラリの警告

そこで、GD ライブラリの php の公式ドキュメントを確認して、以下の項目に行き着きました。

gd.jpeg_ignore_warning

jpeg2wbmp() や imagecreatefromjpeg() が出す警告を無視します。

GD ライブラリはかなり厳密に画像をチェックするようなので、一旦、この警告を無視する設定にします。今回は、php.ini で指定しました。

$ vi /etc/php.ini

[gd]
; Tell the jpeg decode to ignore warnings and try to create
; a gd image. The warning will then be displayed as notices
; disabled by default
; http://php.net/gd.jpeg-ignore-warning
;gd.jpeg_ignore_warning = 0
gd.jpeg_ignore_warning = 1

警告の原因としては、画像アップロード後に Imagemagic で Exif 情報を削除して、それからリサイズ処理をしていますが、Exif 情報を削除した際に何か情報が不足したのかもしれません。

リサイズ処理と Exif の処理の順序を入れ替えようと思いましたが、そもそも、リサイズ時に新しく画像を作れば Exif 情報は消える可能性もありますね。

参考カテゴリ

オススメ記事

最新の投稿やよく見られているのオススメ記事一覧です。

新しいぐるなびAPIで飲食店の店舗情報取得

過去に作成した「ぐるなびAPI」のプログラムや、ぐるなびの Web Service が新しくなったこともあり、API からの情報取得プログラムを書き換えてみました。 以前の記事は下記になります。 ・ ぐるなびAPIで...

WebAPI

>>記事を確認する

NginxのFastCGIキャッシュで白い画面がキャッシュされる

以前から、トップページにアクセスすると、レスポンスステータスは 200 で返ってくるのに、画面に何も表示されない現象が稀に見受けられたので調査してみました。 さすがに機会損失にも繋がるということで、...

Nginx

>>記事を確認する

Laravel5.4の認証ユーザーのパスワードハッシュについて

Laravel で用意されている認証モジュールを利用する際、ユーザーモデル(User.php)経由で登録されるパスワードのハッシュ方法について調べてみました。 Laravel 上ではパスワード文字列を bcrypt() のヘルパー...

PHP / Laravel

>>記事を確認する

Laravel5.4のコントローラコンストラクタでAuth::user()が取得できない

Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。 public function __construc...

PHP / PHPフレームワーク / Laravel

>>記事を確認する

NginxのHSTS(HTTP Strict-Transport-Security)の設定

「Let's Encrypt」のおかげで、全サイト SSL 化していますが、これまで nginx の設定では、http のアクセスがあった場合に https に 301 リダイレクトさせていました。 この場合、Googlebot に http のアク...

セキュリティ / Nginx / SSL

>>記事を確認する

GoogleMapのAPIキーの認証情報にリファラURL設定

昔は API キーを指定することで、JavaScript で GoogleMap が表示できていましたが、何年か前に、そのキーに対して認証情報の追加が推奨されました。 新規で発行する場合は必須になっているかもしれませんが...

Web全般 / WebAPI

>>記事を確認する

AmazonLinuxでApache2.4+php7.1+Laravel5.5

先日、「 VagrantでCentOS6.9のイメージを使う 」の通り、CentOS6.9 には Apache2.4 と PHP7.1 で Laravel のフレームワークが使える環境を構築しました。 ただ、将来的には AWS かつ Amazon Linux 上で動か...

Apache / PHP / AWS / PHPフレームワーク / Laravel

>>記事を確認する

AWSの無料利用枠内で複数サイトをサクサクと運営する方法

MySQLでテーブル定義を取得

似たような構成のテーブルを作る時に、今までは mysqldump コマンドで -d オプションを付けて実行していました。 これでも十分に要件は満たせるのですが、MySQL のコンソールからサクっと出したい場合もある...

データベース / MySQL

>>記事を確認する

Poderosa5の登場と文字色と背景色

新しい PC を購入したので、久し振りに Poderosa のインストールをしたのですが、Poderosa-Terminal として最新バージョンの 5 が 2016 年に登場していました。 これ、職場でもインストールしてみたのですが...

Windows / ツール

>>記事を確認する