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

OK、私はそれを機能させました。おそらく他の人にとっては便利です:

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

(Symfony 4.2 の場合)

解決策は、文字列ではなくバイナリデータのみです。これは私のために働いています。Imagine Bundle で VichUploaderBundle を使用しています。

$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');

代わりにキャッシュ マネージャーを使用してください。

于 2019-03-16T13:05:07.007 に答える