【PHP】で画像を綺麗にリサイズする。

PHPで画像周りの操作をする際はよくGDエクステンションを用いるが、GDの基本リサイズ関数であるimagecopyresized()は縮小した際のジャギがひどく全くもって使い物にならない。 一応フィルタでスムージングもしくはガウシアンぼかしを適用できるが、やるだけ無駄。 そして多少結果がマシになるimagecopyresampled()という関数も用意されているがこれもゴミ。~~ホントゴミ~~。

ということでこれからはPHPで画像の操作をする場合はImageMagickを用いよう。(強制)

Imagickとは

ようはGDより高性能で使いやすいいわゆる神エクステンション。100種類を超す形式の画像読み込みや変換に対応しており、WEBで扱うであろうファイル形式は当然いける。詳細は下記リンク。

http://php.net/manual/ja/book.imagick.php

インストール手順

yumを使おう。

  • とりあえずインストールされているPHPのバージョンを確認。

http://i.gyazo.com/029e75b8904c5e9616af581e28896157.png

  • 今回はremiのPHP5.6を導入。

http://i.gyazo.com/0e209e57a0bf0087515b150764d1ff1e.png

  • php56-php-pecl-imagick-devel.x86_64をインストールする。

※ココから先は環境に依存する(?)場合あり。

ImagickをPHPから読み込む。

  • 先ほどのyum操作でインストールされ、生成されたimagick.soをPHPのインクルードディレクトリにコピーしてやる。 ※自分の場合は下記の感じ。
  • 次にphp.dディレクトリにiniファイルを作成。
  • 下記のように記述。
  • そしたらhttpdを再起動

  • phpinfo()にて下記のように表示されていればインストール成功。

http://i.gyazo.com/1c5a35da23a9e58293ab8a7c6c53400b.png

使ってみる。

とりあえず当初からやりたかった画像のきれいなリサイズと切り抜きをやってみた。 今回は元画像の縦長、横長にかかわらず正方形になるようトリミングし、指定のサイズに縮小する処理を行いたかったのでそれをやる。

これだけ。イヤほんと簡単。しかもめちゃくちゃキレイ。かなり最適化されてる。 ジャギが全く無いしGDはでスムージングを行なった処理と比較しても格が違う。そもそもの画像処理アルゴリズムが違うんだろうけど、GDがどれだけクソかわかる。

しかもサムネイル作成用の関数が用意されていて長さ指定するだけで中央から綺麗にトリミングしてくれるという至れり尽くせりっぷり。画像のフォーマット別に読み込み関数が分かれていない点も最高に使いやすいし、今後画像処理はImagickで行うことを確信した。