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

最近、約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の使用などです。



All Articles