LiipImagineBundle:如何在控制器中应用过滤器?

时间:2014-09-09 16:40:14

标签: symfony liipimaginebundle

我想使用LiipImagineBundle调整我在控制器中上传的图片的大小。

  $extension = $file->guessExtension();
  $newfilename = sha1(uniqid(mt_rand(), true));
  $tmp_folder = $this->get('kernel')->getRootDir() . '/../web/uploads/tmp/'; // folder to store unfiltered temp file
  $tmp_imagename = $newfilename.'.'.$extension;
  $file->move($tmp_folder, $tmp_imagename);

  $tmpImagePathRel = '/uploads/tmp/' . $tmp_imagename;
  $processedImage = $this->container->get('liip_imagine.data.manager')->find('profilepic', $tmpImagePathRel);
  $newimage_string = $this->container->get('liip_imagine.filter.manager')->get($request, 'profilepic', $processedImage, $tmpImagePathRel)->getContent();

  unlink($tmp_folder . $tmp_imagename); // eliminate unfiltered temp file.
  $perm_folder = $this->get('kernel')->getRootDir() . '/../web/uploads/userimages/';
  $perm_imagepath = $perm_folder . $newfilename . '.jpeg';
  $f = fopen($perm_imagepathh, 'w');
  fwrite($f, $newimage_string); 
  fclose($f);

这会带来以下错误:

Attempted to call method "get" on class "Liip\ImagineBundle\Imagine\Filter\FilterManager" in C:\...\UserController.php line xx. Did you mean to call: "getFilterConfiguration"?

然后我尝试改为

$newimage_string = $this->container->get('liip_imagine.filter.manager')->getFilterConfiguration($request, 'profilepic', $processedImage, $tmpImagePathRel);

它带给我

Warning: fwrite() expects parameter 2 to be string, object given in C:\..

我几乎找不到任何文档或示例来完成这项任务:(我对包文档非常失望://

非常感谢任何帮助!

提前致谢!

2 个答案:

答案 0 :(得分:9)

好的,我让它工作,可能对其他人有用:

$newimage_string = $this->container->get('liip_imagine.filter.manager')->applyFilter($processedImage, 'profilepic')->getContent();

答案 1 :(得分:0)

(对于Symfony 4.2)

该解决方案仅适用于二进制数据,不适用于字符串。 这为我工作。我正在将VichUploaderBundle与Imagine Bundle结合使用。

$ helper是\ Vich \ UploaderBundle \ Templating \ Helper \ UploaderHelper的实例。 如果您不知道我在说什么,请查看他们的文档。

$path = $helper->asset($entity, 'imageFile');

$imagine = $this->container->get('liip_imagine.cache.resolver.default');
$imageString = $imagine->resolve($path, 'public_large');

$ this-> container-> get('liip_imagine.cache.resolver。 context ');

这取决于您使用的上下文。检查您在liip_imagine.yaml上的解析器配置

$ imagine-> resolve($ path,您使用的过滤器);

希望您可以节省时间。

更新

此代码出现问题。它仅生成图像路径(如果图像已调整大小,则将显示它。但是,如果图像刚刚上传但尚未调整大小,那么您需要的解决方案是下面的解决方法)

$this->container->get('liip_imagine.cache.manager');

改为使用缓存管理器。