图像大小调整ZF2(image resize zf2)

2019-07-19 19:06发布

我需要实现图像大小调整的功能(优选与GD2库扩展)Zend框架2。

我无法找到相同的任何组件/帮手。 任何引用?

如果我想创建一个,我应该在哪里添加。 在旧Zend框架,有动作助手的概念,怎么样Zend框架2?

请在这里建议最好的解决方案。

Answer 1:

我目前使用试想一下,连同Zend框架2来处理这个问题。

  1. 安装试想: 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最终)

相关阅读: Zend框架-返回使用控制器的图像/文件



Answer 2:

使用的服务,这和它注入到控制器需要的功能。



Answer 3:

下面是一个叫做模块WebinoImageThumb Zend框架2.结帐这一点。 它有一些伟大的功能,例如 -

  • 调整图片大小
  • 图片裁剪,垫,旋转,显示和保存图像
  • 创建图像反射


Answer 4:

对于那些谁不能整合Imagine正确像我..

我发现了另一个解决方案在这里WebinoImageThumb这工作完全罚款我。 这是,如果你不想要阅读完整的文档一点解释:

运行: php composer.phar require webino/webino-image-thumb:dev-develop和添加WebinoImageThumb作为活动的模块config/application.config.php进一步的样子:

<?php
return array(
    // This should be an array of module namespaces used in the application.
    'modules' => array(
        'Application',
        'WebinoImageThumb'
    ),

..以下保持不变

现在,在你的控制器动作使用通过服务定位器象下面这样:

// at top on your controller
use Zend\Validator\File\Size;
use Zend\Validator\File\ImageSize;
use Zend\Validator\File\IsImage;
use Zend\Http\Request

    // in action
$file = $request->getFiles();
$fileAdapter = new \Zend\File\Transfer\Adapter\Http();
$imageValidator = new IsImage();
if ($imageValidator->isValid($file['file_url']['tmp_name'])) {
    $fileParts = explode('.', $file['file_url']['name']);
    $filter = new \Zend\Filter\File\Rename(array(
               "target" => "file/path/to/image." . $fileParts[1],
               "randomize" => true,
              ));

    try {
         $filePath = $filter->filter($file['file_url'])['tmp_name'];
         $thumbnailer = $this->getServiceLocator()
                        ->get('WebinoImageThumb');
         $thumb = $thumbnailer->create($filePath, $options = [], $plugins = []);
         $thumb->adaptiveResize(540, 340)->save($filePath);

      } catch (\Exception $e) {
          return new ViewModel(array('form' => $form, 
                     'file_errors' => array($e->getMessage())));
      }
  } else {
      return new ViewModel(array('form' => $form, 
                 'file_errors' => $imageValidator->getMessages()));
  }

祝好运..!!



Answer 5:

为了调整你应该这样做,飞上传的图片:

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;
}


文章来源: image resize zf2