GDでサムネイル作成をすると思ったよりもメモリを食う

GDを使って画像のサムネイルを作成して保存するというPHPスクリプトを書いて動かしていたのですが、1500×1500(多分)を超えるサイズの画像を処理させると何故かプログラムが止まってしまう。

原因を調べると、メモリの限界だった。
php.iniで

memory_limit = 16M

という設定にしています。
1200×1200の画像をこのサムネイル生成スクリプトで 80x80のサムネイルを作成し、JPEGで保存させます。すると

# while :; do ps alx | grep httpd | \
awk '{printf ("%d\t%s\n", $8,$13)}' ; sleep 1 ; clear ;done

5448    /usr/local/apache/bin/httpd
6340    /usr/local/apache/bin/httpd
6392    /usr/local/apache/bin/httpd
6408    /usr/local/apache/bin/httpd
15356   /usr/local/apache/bin/httpd
(以下略)

というように、1200×1200で15M近いメモリを食っていたのです。
とりあえず、memory_limitを大きめの数字にしてやれば正常に動くので、原因はほぼ確定っぽいです。

それにしても、無圧縮BMPに変換しても15Mは超えない画像なのに、何でこんなにメモリを食うんだろ…。
mixiやflickrが画像用のサーバーを別に準備している理由がよ〜くわかった気がする。

ちなみにPHPのスクリプトはこのページの物をほとんどそのまま使いました。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。