画像を扱うウェブサイトではサムネイル画像も用意していると便利です。今回、サムネイルをPHPで生成するにあたって調べた事をメモしておきます。GDPHPで画像処理をする場合、GDかImageMagickが人気です。これらの違いですが、php.netの関数リファレンスを見比べるにImageMagicはGDよりも豊富な機能を提供しているようです。GDは手軽さの点で優れています。4.3以降GDライブラリがPHPに付属しているので、何もしなくても、すぐに使いはじめることができるのです。今回の目的はサムネイルの生成という基本的な操作ですから、GDでも十分です。いうことで、以下、GDを使っていることが前提です。関数を眺めると気付くかもしれませんが、イメージのサイズを変更する関数が複数あります。imagecopyresizedimagecopyresampledimagescaleこれらの違いは、各関数の説明を読んでも、はっきりとは理解できませんでしたが、なんとなくまとめると次の通り。imagecopyresizedとimagecopyresampledは画像の一部、または全部を切り取ってサイズを変更する。imagescaleは切り抜かずにサイズを変更する。imagecopyresizedと違いimagecopyresampledはより高度な補完処理が行われるので、綺麗にリサイズされる。imagescaleも補完処理が行われるが、補間アルゴリズムを選択できるので品質はアルゴリズムによる。リサイズとリサンプルの違いが分からなかったので間違っているかもしれないですが、こんな感じで把握しました。サムネイル画像用途の場合、普通、クリッピングはしないですから、1,2,3の関数の違いは(補完アルゴリズムの)品質の差ということになりそうです。サムネイルのクオリティを確かめるそれでは実際に各関数でどのようなサムネイルが生成されるのかを見ていきたいと思います。この確認のため、次のようなファイルを書きました。TAKADA最初のデモはこの画像のオリジナルで、6000*4000、9.2MBのjpgです。これを各のアルゴリズムで300pxのサムネイルにして見てみます。ファイル名から分かるように上から、imagescaleのIMG_NEAREST_NEIGHBOUR、IMG_BILINEAR_FIXED、IMG_BICUBIC、IMG_BICUBIC_FIXEDとimagecopyresized、imagecopyresampledです。各サムネイルを見て、分かりやすいのがIMG_BICUBICとimagecopyresampledだと思います。他のサムネイルは全体的にノイズが混じったように感じられるのに対して、この二つは若干ぼやけて見えるものの、オリジナルに近い印象を受けます。IMG_BICUBICとimagecopyresampledを比較すると、微妙ではありますが、IMG_BICUBICのサムネイルは全体的に暗くなっている風に見えます。処理にかかった時間は次の通り。sec一回しか測っていないのでアレですが、imagecopyresampledが圧倒的に重い処理のようです。新しいとは言えないPCですが、1.6秒もかかっています。IMG_BICUBICもやや重い処理です。次に2次元イラストでも確かめてみます。600pxから300pxのサムネイルで、順番は同じです。このデモでも先ほどと同じ傾向があり、IMG_BICUBICとimagecopyresampled以外はエッジにジャギーが目立ちます。sec今回、imagecopyresamepledがIMG_BICUBICと同じぐらいになっています。imagecopyresampledは振り幅が大きいようです。ソース画像が巨大だと苦手なのか、あるいはイラストが得意なのでしょうか。まとめサムネイルの品質で言えばimagecopyresampledに軍配が上がりそうです。リソースに余裕があり、サムネイルを静的に生成するケースに最適ですね。逆に、頻繁に、もしくは動的にサムネイルを生成したりするような場合はimagescaleでIMG_BILINEAR_FIXEDやバランスの良いIMG_BICUBICを使うと良さそうです。3.0このサイトはアマゾンアソシエエイトのリンクを含みます。