PECL::Imagickを試す
GDで展開できない画像*1があったのでImageMagickを試そうと思って導入してみました。
実際に使ってみる
マニュアルはいろいろ探しましたが、PHPマニュアルが一番詳しいと思います。
PHP: Imagick 画像ライブラリ - Manual
しかしPHPマニュアルもAPI一覧のみで詳しい解説は書かれていないので実際に使って試してみました。
リサイズしてみた
APIリストを眺めてみるとリサイズに使いそうなメソッドである下記5つを試してみました。
- Imagick::adaptiveResizeImage
- Imagick::cropImage
- Imagick::thumbnailImage
- Imagick::resizeImage
- Imagick::cropThumbnailImage
Imagick::adaptiveResizeImage
メソッドの説明
データに依存する三角測量にもとづいて画像のサイズを変更する, と記述されてますが何のことやら。。引数のcolumns, rowsはマニュアルページのサンプルコードから類推すると、それぞれ縦幅, 横幅の様です。
bool Imagick::adaptiveResizeImage ( int $columns , int $rows )
http://jp2.php.net/manual/ja/function.imagick-adaptiveresizeimage.php
サンプルコード
300x300の正方形にリサイズしています。
<?php $image = new Imagick('/path/to/sample.jpg'); $image->adaptiveResizeImage(300,300); header('Content-type: image/jpeg'); echo $image;
結果
Fatal error: Call to undefined method Imagick::adaptiveResizeImage()
メソッドが無いみたいです。とりあえず次へw
Imagick::cropImage
メソッドの説明
切り取りたい縦・横幅と元画像の切り取り開始位置を引数にとってます。よくあるcropメソッドですね。
bool Imagick::cropImage ( int $width , int $height , int $x , int $y )
http://jp2.php.net/manual/ja/function.imagick-cropimage.php
サンプルコード
300x300の大きさで、元画像の左隅(0,0)からcropさせてみました。
<?php $image = new Imagick('/path/to/sample.jpg'); $image->cropImage(300,300, 0, 0); header('Content-type: image/jpeg'); echo $image;
Imagick::thumbnailImage
メソッドの説明
fitをtrueにすると、columnsかrowsの小さい方の値に合わせてサムネイルが生成される模様です。
bool Imagick::thumbnailImage ( int $columns , int $rows [, bool $fit ] )
画像のサイズを指定したものに変更し、関連付けられたプロパティをすべて削除します。 ウェブ上での表示に適した小さなサムネイル画像を作成します。 3 番目のパラメータに true を指定すると、columns や rows にそれぞれの最大値を使用します。両方のパラメータが、 マッチするまであるいは指定したパラメータより小さくなるまで縮小されます。
http://jp2.php.net/manual/ja/function.imagick-thumbnailimage.php
サンプルコード
300x300の大きさで、filをtrueにしてサムネイル生成
<?php $image = new Imagick('/path/to/sample.jpg'); $image->thumbnailImage(300, 300, true); header('Content-type: image/jpeg'); echo $image;
Imagick::resizeImage
メソッドの説明
Imagick::thumbnailImage()との違いはfilter, blurを指定できる所の様です。
bool Imagick::resizeImage ( float $columns , float $rows , int $filter , float $blur )
指定した大きさとフィルタで、画像のサイズを変更します。
http://jp2.php.net/manual/ja/function.imagick-resizeimage.php
サンプルコード
マニュアルのサンプルコードをまねて、LANCZOSフィルタ*2を使ってみます。その他の各種フィルタ定数はマニュアルを参考してください
<?php $image = new Imagick('/path/to/sample.jpg'); $image->resizeImage(300, 300, imagick::FILTER_LANCZOS, 0); header('Content-type: image/jpeg'); echo $image;
Imagick::cropThumbnailImage
メソッドの説明
縮小してからサムネイルを生成するメソッド。centerから指定した大きさで切り取ってくれてる様です。
bool Imagick::cropThumbnailImage ( int $width , int $height )
固定サイズのサムネイルを作成します。まず画像のサイズを縮小し、指定した範囲を中心から切り取ります。
http://jp2.php.net/manual/ja/function.imagick-cropthumbnailimage.php
サンプルコード
300x300のサムネイルを生成しています。
<?php $image = new Imagick('/path/to/sample.jpg'); $image->cropThumbnailImage(300, 300); header('Content-type: image/jpeg'); echo $image;
まとめ
ざっくりと用途を考えると下みたいな感じでしょうか。
メソッド名 | 用途 |
---|---|
Imagick::adaptiveResizeImage | メソッドが存在しないようなので使えない |
Imagick::cropImage | 元画像から切り取る範囲が決まっている |
Imagick::thumbnailImage | 比率維持したまま、サムネイル作りたい |
Imagick::resizeImage | フィルタ使って、サムネイル作りたい |
Imagick::cropThumbnailImage | 比率維持したまま、中心から任意の範囲を切り取りたい |