サムネイル画像の自動生成のために
webサイトやアプリなどを作っていると画像のサムネイルが欲しくなる時がありますよね。手動で作るのもいいのですが、とても手間です。
そこでやはりサーバなどに自動的にサムネイルを作らせるのが良いと思います。
PHPではいくつかの画像系ライブラリがありますが、今回はImageMagickをつかってサムネイル画像を作ってみたいと思います。
ImageMagickの導入
ImageMagickのPHPエクステンションはPECLで提供されています。導入にはいくつかの段階がありますが 、拙著の記事でまとめてみましたので参考にしてください。
サムネイル画像を作る
今回用意したテスト画像はこちら。
- 幅1000px
- 縦750px
- jpeg形式
この画像から300px×300pxのサムネイル画像を作ります。
コードはこちら
コメントを再度繰り返すと以下のような意味になります。
- 元画像のパスの設定
- サムネイル画像保存先のパスの設定
- Imagickインスタンスを生成
- cropThumbnailImageメソッドでサムネイルを生成
- サムネイルを保存
得られた画像はこちら
300px×300pxのサムネイルになっていますね。コードも非常に短いです。わずか5行です。
cropThumbnailImageメソッドの詳しい説明に関してはPHPマニュアルを参照してください。
縦横比の自動調節
このcropThumbnailImage
メソッドはありがたいことにトリミングを自動的に行ってくれます。
今回の画像は横幅の方が長いのでそのままでは正方形のサムネイルにはなりません。なったとしても縦横比が崩れた画像になってしまいます。
しかしcropThumbnailImage
メソッドでは短い方の辺をサムネイルサイズに合わせ、長い方の辺をトリミングしてくれます。つまり中央トリミングをしてくれているのです。
例えば今回の画像を100px×300pxというような縦長のサムネイル画像にしてみます。トリミングしないで縮小した場合、ひどく横に潰れた画像になってしまうはず。
しかしcropThumbnailImageメソッドなら中央トリミングをして、画像を歪めずにサムネイル画像を作ってくれます。わ〜い。
これにより別途トリミング処理を用意しなくて縦横比を崩さずにサムネイル画像を生成することが可能です。
GDライブラリとの比較
ImageMagickがCで書かれていることなどから処理はImageMagickに軍配が上がるようです。
また今回の「画像を歪めずにサムネイルを作る」をGDライブラリを使ってやろうとすると以下のようなコードになります。
ImageMagickの方が全然短いコードで済んでしまいます。
また機能的にもImageMagickの方が格上です。
もし導入が面倒ではないようでしたら画像処理にはImageMagickを使ったほうが便利かもしれません。
まとめ
- サムネイル画像生成にはImageMagickの
cropThumbnailImage
メソッドが便利 - 中央トリミングを自動的に行ってくれる
- GDライブラリよりも高速・高機能