私はsymfonyプロジェクトに取り組んでおり、vichuploaderとliipImagineを使用しているので、ユーザーが最大10Mbの画像をアップロードできるように、アップロードされた画像のサイズを変更してアップロードディレクトリに保存します(サイズ変更された画像)。次に、100KBのサイズを維持するようにサイズを変更します。
これまで、imagine_filterを使用してアップロードされた画像のサイズを変更することがわかりましたが、この場合、元の画像が保持され、サイズ変更された画像がキャッシュに作成されます。
だから私はこのようなことをしようとしていました:私のコントローラーで
public function edit(Post $post,Request $request)
{
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
// And then resize all uploaded images...
// All i know is to get the filename of each image stored in public/media/posts.
// In loop because we allow multiple upload
// foreach ($post->getPictures() as $picture) {
// $picture->getFilename();
// }
$this->addFlash('success', 'ELement successfully modified');
return $this->redirectToRoute('admin.post.index');
}
return $this->render('admin/post/edit.html.twig', [
'post' => $post,
'form' => $form->createView()
]);
}
私のPostType
class PostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('category', EntityType::class, [
'class' => Category::class,
'required' => true,
'choice_label' => 'title'
])
->add('pictureFiles', FileType::class, [
'required' => false,
'multiple' => true
])
->add('content')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Post::class,
]);
}
}
助けてくれてありがとう!
提案が見つからなかったので、InterventionImageを使用することにしました。これがベストプラクティスではないことはわかっていますが、必要なものが得られない場合は、自分が持っているものに満足するだけです。そして、私が上で言ったように、目標はサーバー上で最小の画像を維持し、ユーザーが大きな画像をアップロードできるようにすることです。興味があるかもしれない人のために、私はこれを追加しました
public function edit(Post $post,Request $request)
{
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
$pics = [];
foreach ($post->getPictures() as $picture) {
// this path of the image
$targetPath = 'media/posts/' . $picture->getFileName();
// and then resize it
$this->resizeImage($targetPath);
}
dump($pics);
$this->addFlash('success', 'ELement successfully modified');
return $this->redirectToRoute('admin.post.index');
}
return $this->render('admin/post/edit.html.twig', [
'post' => $post,
'form' => $form->createView()
]);
}
private function resizeImage($targetPath)
{
$manager = new ImageManager(['driver' => 'gd']);
$manager->make($targetPath)->widen(768, function ($constraint) {
$constraint->upsize();
})->save($targetPath);
}
これを改善する別のアイデアがあれば、私は気を配ります、ありがとう:)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加