[PHP] GDで画像を縮小すると汚くなる時の解決法


PHPでGDを利用してサムネイルを作成する方法
こちらの記事を参考にGDを使って画像を縮小してみたところ、ニアレストネイバー法で縮小したように汚くなってしまいました。

GDでバイキュービック法のようになめらかに縮小することはできないのか検索して調べてみたところ、こちらの記事を発見。
GDは画像縮小が苦手な子。でも、実はやれば出来る子。

よくある、画像を縮小するPHPのサンプルで紹介されているのが、imagecreate()とimagecopyresized()を使ったやり方です。多くの人は、始めに紹介されるサンプルでやってみると思うので、この2つの関数で画像縮小を試みます。すると、画像は画質が荒くなり、おまけにJpegでは色が変色するという災難に遭うことになります。そうなってしまうと、食の豊かな世の中、食わず嫌いになってしまい、GDを使うこと自体を放棄し、数ある代替策に手を伸ばしてみることになるでしょう。

入り口で痛い目にあうと、これ以上続けようとはなかなか思わないものですが、もうすこし踏ん張って、GDの関数を探してみると、imagecreatetruecolor()とimagecopyresampled()に出会います。これらはそれぞれimagecreate()とimagecopyresized()と似たような処理をする関数ですが、imagecreatetruecolor()とimagecopyresampled()を使うだけで、GDによる画像縮小の質が格段によくなるのです。

最初の記事を参考にした時のソースコードには、imagecreatetruecolor()とimagecopyresized()が使われていました。
imagecopyresized()をimagecopysampled()に書き変えてみたところ、なめらかで綺麗な縮小画像を生成できました!

スポンサードリンク

関連記事