7

我想使用 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:\..

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

非常感谢任何帮助!

提前致谢!

4

2 回答 2

12

好的,我让它工作了,也许对其他人有用:

$newimage_string = $this->container->get('liip_imagine.filter.manager')->applyFilter($processedImage, 'profilepic')->getContent();
于 2014-09-09T17:00:14.740 回答
1

(对于 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, filter you used );

希望您节省时间。

更新

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

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

请改用缓存管理器。

于 2019-03-16T13:05:07.007 回答