6

zend Framework 2 で画像のサイズ変更機能を (できれば gd2 ライブラリ拡張を使用して) 実装する必要があります。

同じコンポーネント/ヘルパーが見つかりませんでした。参照はありますか?

作成したい場合は、どこに追加すればよいですか。古い Zend フレームワークにはアクション ヘルパーという概念がありましたが、Zend フレームワーク 2 ではどうでしょうか。

ここで最善の解決策を提案してください。

4

5 に答える 5

17

私は現在、これを処理するためにImagineをZendFramework2と一緒に使用しています。

  1. Imagineをインストールします。php composer.phar require imagine/Imagine:0.3.*
  2. サービスのサービスファクトリを作成しますImagine(でYourModule::getServiceConfig):

    return array(
        'invokables' => array(
            // defining it as invokable here, any factory will do too
            'my_image_service' => 'Imagine\Gd\Imagine',
        ),
    );
    
  3. ロジックで使用します(これにより、コントローラーを使用した小さな例):

    public function imageAction()
    {
        $file    = $this->params('file'); // @todo: apply STRICT validation!
        $width   = $this->params('width', 30); // @todo: apply validation!
        $height  = $this->params('height', 30); // @todo: apply validation!
        $imagine = $this->getServiceLocator()->get('my_image_service');
        $image   = $imagine->open($file);
    
        $transformation = new \Imagine\Filter\Transformation();
    
        $transformation->thumbnail(new \Imagine\Image\Box($width, $height));
        $transformation->apply($image);
    
        $response = $this->getResponse();
        $response->setContent($image->get('png'));
        $response
            ->getHeaders()
            ->addHeaderLine('Content-Transfer-Encoding', 'binary')
            ->addHeaderLine('Content-Type', 'image/png')
            ->addHeaderLine('Content-Length', mb_strlen($imageContent));
    
        return $response;
    }
    

これは明らかに「迅速で汚い」方法です。次のことを行う必要があるためです(オプションですが、再利用性のための優れた方法です)。

  1. おそらくサービスで画像変換を処理します
  2. サービスから画像を取得する
  3. 入力フィルターを使用してファイルとパラメーターを検証します
  4. キャッシュ出力(最終的にはhttp://zend-framework-community.634137.n4.nabble.com/How-to-handle-404-with-action-controller-td4659101.htmlを参照)

関連:ZendFramework-コントローラーを使用して画像/ファイルを返す

于 2013-02-12T13:11:13.240 に答える
2

このためのサービスを使用して、機能を必要とするコントローラーに注入します。

于 2013-02-12T12:56:51.420 に答える
2

これは、Zend Framework 2のWebinoImageThumbというモジュールです。これを確認してください。次のようないくつかの優れた機能があります-

  • 画像のサイズ変更
  • 画像のトリミング、パディング、回転、画像の表示と保存
  • イメージの反射を作成する
于 2014-01-01T10:19:48.433 に答える
0

アップロードされた画像のサイズをその場で変更するには、次のようにする必要があります。

public function imageAction() 
{
// ...
$imagine = $this->getImagineService();
$size = new \Imagine\Image\Box(150, 150);
$mode = \Imagine\Image\ImageInterface::THUMBNAIL_INSET;

$image = $imagine->open($destinationPath);
$image->thumbnail($size, $mode)->save($destinationPath);
// ...
}

public function getImagineService()
{
    if ($this->imagineService === null)
    {
        $this->imagineService = $this->getServiceLocator()->get('my_image_service');
    }
    return $this->imagineService;
}
于 2013-03-20T21:14:35.797 に答える