「深刻な」プロジェクトでは、開発者はユーザーがアップロードした画像のコピーを減らすという課題に直面しています。 さまざまなHOW TOを読んだ後、URL経由で画像をリクエストするときにプレビュー生成を使用することにしました。
まず、ルートを作成する必要があります。
Route::set('image_resize', 'image/resize/<width>x<height>(/<file>)', array('width' => '\d+', 'height' => '\d+', 'file' => '.+')) ->defaults(array( 'controller' => 'media', 'action' => 'resize', ));
プレビューを生成するサンプルHTMLコード:
<img src=”/image/resize/200x200/path_to_file” >
ルートからわかるように、コントローラーは、デフォルトのメソッドaction_resize()でController_Mediaと呼ばれます。 アクションでは、リクエストパラメータを受け入れ、bootstrap.phpで接続する必要があるImageモジュールを使用してプレビューを生成します。
// $image = Image::factory($file) // $image->resize($width, $height); // $image->save($file_preview);
アクションの最後で、ヘッダーを作成し、プレビュー自体を返す必要があります。
$this->response->body(file_get_contents($file_preview)); $this->response->headers('Content-Type', File::mime_by_ext($pathinfo['extension'])); $this->response->headers('Content-Length', filesize($file_preview)); $this->response->headers('Last-Modified', date('r', filemtime($file_preview)));
当然、しばらくして、既製のソリューションを探していました(その時点で、バージョンKohana 3.2に既に切り替えていました)。 その結果、ドキュメントにはImageモジュールの操作例が含まれており(このセクションは3.0では空でした)、素晴らしいImageflyモジュールが見つかりました 。
このモジュールは、URLを介してプレビューを生成するのと同じ原理を使用します。 たとえば、リンク
/imagefly/w100-h150-c/path/to/image.jpg
は、画像を幅100pxおよび高さ150pxに縮小し、結果の画像をトリミングして、モジュール構成中に指定されたプレビュー用のフォルダーに保存します。 ちなみに、Imageflyには多くの興味深い設定が含まれており、そのうちの1つはキャッシングです。これは実装にはありませんでした。
したがって、既製の開発を使用する方が簡単であると確信していますが、それを気にすることで、不器用でいが、うまく機能するものを発明するのは素晴らしいことです。
また、プレビューの生成にはどのような方法を使用していますか?
PSコハナに関する一連の小さな記事が計画されています。コントローラー構造の編成、典型的なデータオブジェクトを操作するための「自動生成」管理パネル、smartyの使用などです。