我想使用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:\..
我几乎找不到任何文档或示例来完成这项任务:(我对包文档非常失望://
非常感谢任何帮助!
提前致谢!
答案 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');
改为使用缓存管理器。