コハナ、画像プレビューはただ

最近、約1年前、私たちのチームは「深刻な」プロジェクトを実装するためのPHPフレームワークを選択するタスクに直面しました。 結局、彼らが小花を選んだのは、その単純さ、使いやすさ、そして高い入場基準に賄われていないことを覚えています。 当時、現在のバージョンは3.0であり、ドキュメントに熱心でした。

「深刻な」プロジェクトでは、開発者はユーザーがアップロードした画像のコピーを減らすという課題に直面しています。 さまざまな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の使用などです。

Source: https://habr.com/ru/post/J149426/


All Articles