2016/10/18 20:53:26

PHPでImageMagickを使ってサムネイル画像を作成する

目次(クリックするとジャンプします)
  • 1:サムネイル画像の自動生成のために
  • 2:ImageMagickの導入
  • 3:サムネイル画像を作る
  • 4:縦横比の自動調節
  • 5:GDライブラリとの比較
  • 6:まとめ

サムネイル画像の自動生成のために

webサイトやアプリなどを作っていると画像のサムネイルが欲しくなる時がありますよね。手動で作るのもいいのですが、とても手間です。

そこでやはりサーバなどに自動的にサムネイルを作らせるのが良いと思います。

PHPではいくつかの画像系ライブラリがありますが、今回はImageMagickをつかってサムネイル画像を作ってみたいと思います。

ImageMagickの導入

ImageMagickのPHPエクステンションはPECLで提供されています。導入にはいくつかの段階がありますが 、拙著の記事でまとめてみましたので参考にしてください。

サムネイル画像を作る

今回用意したテスト画像はこちら。

neko_imagick

  • 幅1000px
  • 縦750px
  • jpeg形式

この画像から300px×300pxのサムネイル画像を作ります。

コードはこちら

コメントを再度繰り返すと以下のような意味になります。

  • 元画像のパスの設定
  • サムネイル画像保存先のパスの設定
  • Imagickインスタンスを生成
  • cropThumbnailImageメソッドでサムネイルを生成
  • サムネイルを保存

得られた画像はこちら

neko_resize

300px×300pxのサムネイルになっていますね。コードも非常に短いです。わずか5行です。

cropThumbnailImageメソッドの詳しい説明に関してはPHPマニュアルを参照してください。

PHPマニュアル cropThumbnailImage

縦横比の自動調節

このcropThumbnailImageメソッドはありがたいことにトリミングを自動的に行ってくれます。

今回の画像は横幅の方が長いのでそのままでは正方形のサムネイルにはなりません。なったとしても縦横比が崩れた画像になってしまいます。

neko_resize2

しかしcropThumbnailImageメソッドでは短い方の辺をサムネイルサイズに合わせ、長い方の辺をトリミングしてくれます。つまり中央トリミングをしてくれているのです。

例えば今回の画像を100px×300pxというような縦長のサムネイル画像にしてみます。トリミングしないで縮小した場合、ひどく横に潰れた画像になってしまうはず。

neko_resize5

しかしcropThumbnailImageメソッドなら中央トリミングをして、画像を歪めずにサムネイル画像を作ってくれます。わ〜い。

neko_resize

これにより別途トリミング処理を用意しなくて縦横比を崩さずにサムネイル画像を生成することが可能です。

GDライブラリとの比較

ImageMagickがCで書かれていることなどから処理はImageMagickに軍配が上がるようです。

また今回の「画像を歪めずにサムネイルを作る」をGDライブラリを使ってやろうとすると以下のようなコードになります。

ImageMagickの方が全然短いコードで済んでしまいます。

また機能的にもImageMagickの方が格上です。

もし導入が面倒ではないようでしたら画像処理にはImageMagickを使ったほうが便利かもしれません。

まとめ

  • サムネイル画像生成にはImageMagickのcropThumbnailImageメソッドが便利
  • 中央トリミングを自動的に行ってくれる
  • GDライブラリよりも高速・高機能