【sfThumbnailPlugin】
サムネイルを生成するプラグイン
画像のリサイズをする時は便利
symfony plugin-install http://plugins.symfony-project.com/sfThumbnailPlugin
このページは下記のURLの内容を翻訳したものです。
http://trac.symfony-project.com/wiki/sfThumbnailPlugin
sfThumbnailPlugin
sfThumbnailPluginは画像からサムネイルを生成するプラグインです。画像処理はGDライブラリかImageMagickに依存するため、どちらかが必須となります。
インストールする
既存のsymfonyプロジェクトへプラグインをインストールするには、お決まりのsymfonyのCLIを使います:
$ symfony plugin-install http://plugins.symfony-project.com/sfThumbnailPlugin
もう1つの方法としてPEARがインストールされていない環境の場合は、最新パッケージを本Wikiページからダウンロードして、pluginsディレクトリ以下で展開する方法もあります。
新しいクラスをオートローディングするためにキャッシュをクリアします:
$ php symfony cc
これでインストールは完了です。
Note: もしGDライブラリが有効でないならば、php.iniの関連した行のコメントを外して、PHPで画像処理関数を使えるようにWebサーバを再起動する必要があります。
Note: ImageMagickを使う場合は、http://www.imagemagick.org からダウンロードしてバイナリをインストールしてください。
コンテンツ
プラグインは3つのクラス (sfThumbnail, sfGDAdapter, sfImageMagickAdapter)から構成されています。利用するメソッドは以下の通りです:
// サムネイル属性を初期化する
__construct($maxWidth = null, $maxHeight = null, $scale = true, $inflate = true,
$quality = 75, $adapterClass = null, $adapterOptions = array())
// ファイルシステムから画像ファイルをロードする
loadFile($imageFile)
// 文字列から画像ファイルをロードする(現在は、GDアダプタのみ対応)
loadData($imageString, $mimeType)
// サムネイルをファイル保存する
save($thumbFile, $targetMime = null)
GDでサポートされる画像の種類は 'image/jpeg', 'image/png' and 'image/gif'です。
ImageMagickは100種類以上のフォーマットをサポートしています。
Note: $quality設定はJPEG画像のみ適用されます。
利用方法
既存の画像ファイルからサムネイルを生成する
既存の画像ファイルからサムネイルを生成するプロセスは非常に単純です。
最初に、sfThumbnailオブジェクトに2つのパラメータ (目的とするサムネイルの最大幅と最大の高さ)を与えて初期化します。
// 150x150サイズのサムネイルとしてオブジェクトを初期化する
$thumbnail = new sfThumbnail(150, 150);
その次に、指定したファイルパスをloadFile()メソッドに渡します。
// 渡された画像をロードする
$thumbnail->loadFile('/path/to/image/file.png');
最後に、サムネイルオブジェクトにサムネイル画像の保存を要求します。ファイルパスを提供する必要があります。オプションとして、元の画像と同じmime-typeを利用したくない場合は、第2引数でmime-typeを指定することが可能です。
// サムネイルを保存する
$thumbnail->save('/path/to/thumbnail/file.jpg', 'image/jpg');
元画像ファイルと目的とするファイルの両方ともファイルシステム上の絶対パスで指定しなければなりません。symfonyプロジェクトディレクトリ下にファイルを保管する場合、sfConfig::get()でアクセスして、利用するディレクトリが不変であるか確認しましょう。
アップロードファイルからサムネイルを生成する
画像ファイルをアップロードする場合、各々のアップロードされたファイルに対してサムネイルを生成する必要があります。例として、アップロードされた画像ファイルと同じ回数だけ、最大サイズ150x150pxのサムネイル画像を保存するために、フォームの取り扱い方法を示します:
public function executeUpload()
{
// アップロードされたファイル名を取得する
$fileName = $this->getRequest()->getFileName('file');
// サムネイルを生成する
$thumbnail = new sfThumbnail(150, 150);
$thumbnail->loadFile($this->getRequest()->getFilePath('file'));
$thumbnail->save(sfConfig::get('sf_upload_dir').'/thumbnail/'.$fileName, 'image/png');
// アップロードしたファイルをuploadsディレクトリへ移動する
$this->getRequest()->moveFile('file', sfConfig::get('sf_upload_dir').'/'.$fileName);
// 次のアクション
$this->redirect('media/show?filename='.$fileName);
}
このアクション呼ぶ前に、uploads/thumbnail/ディレクトリを作成するのを忘れないようにしてください。
ImageMagick特有の使い方
sfImageMagicAdapterを指定して呼ぶ以外は前述に書いたGDの使い方と同じです。
$thumbnail = new sfThumbnail(150, 150, true, true, 75, 'sfImageMagickAdapter');
カスタムオプション
コンストラクタの最後のオプションはImageMagickへ渡すカスタムオプションの配列です。この機能のいくつかの例を下記に示します。
PDFドキュメントから最初のページを抜粋する:
$thumbnail = new sfThumbnail(150, 150, true, true, 75, 'sfImageMagickAdapter', array('extract' => 1));
値が1ならば最初のページ、2なら2ページ目となります。
ImageMagickのバイナリを標準でない名前で使っているなら、指定できます:
$thumbnail = new sfThumbnail(150, 150, true, true, 75, 'sfImageMagickAdapter',
array('convert' => 'my_imagemagick_binary'));
デフォルトでは、sfThumbnailは求められている横幅と縦幅のサムネイルにリサイズします。しかし、縮尺比を変更せずに元の画像サイズとは異なる横幅と縦幅のサムネイルを生成したいなら、カスタムオプションで配列のキーを"method"、値を"shaving"にすれば、元の画像と同じ縮尺比でリサイズされたサムネイルを生成することができます。"shave_bottom"を指定した場合、画像の横幅が縦幅より大きいとき、sfThumbnailは指定したサイズまで左サイドと右サイドの両方をカットします。"method"オプションを機能させるにはsfThumbnailの第3引数をfalseに設定します。
$thumbnail = new sfThumbnail(150, 150, false, true, 75, 'sfImageMagickAdapter', array('method' => 'shave_all'));
$thumbnail->loadFile('http://www.walkerbooks.co.uk/assets_walker/dynamic/1172005677146.png');
$thumbnail->save('/tmp/shave.png', 'image/png');