gpt4 book ai didi

symfony - 上传后使用LiipImagineBundle调整图像大小吗?

转载 作者:行者123 更新时间:2023-12-03 12:42:32 24 4
gpt4 key购买 nike

我将LiipImagineBundle与Symfony 2.1一起使用,并希望在上载用户时将其上载的图像调整大小,然后再将其保存到永久文件系统位置(以剥离元数据,采用jpeg格式并限制文件的大小)。我必须从 Controller 中调用“ strip ”和“调整大小”过滤器,然后将过滤后的图像从临时位置保存到文件系统中我选择的文件夹中。

我尝试使用LiipImageBundle Controller as a service as indicated in the bundle's readme,但是调用Action主要是用于在请求显示图像时在缓存目录中创建过滤的图像(在另一种情况下,将其用于过滤)。无论如何,我试图按照以下方式实现它,并使它起作用。我必须首先将文件从Web服务器的php临时目录移动到Web文件夹中的目录,才能应用过滤器。其次,我应用了过滤器并删除了(unlink())初始未过滤的文件。最后,我不得不将过滤后的文件移动(重命名())到文件系统中的永久位置。必须将文件移动两次,一次应用过滤器,然后删除(取消链接)1个文件以使其全部正常工作。有没有更好的方法(不需要中间 Action )在上载时使用 bundle 软件?

class MyController extends Controller
{
public function new_imageAction(Request $request)
{
$uploadedFile = $request->files->get('file');
$tmpFolderPathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/tmp/';
$tmpImageNameNoExt = rand();
$tmpImageName = $tmpImageNameNoExt . '.' . $fileExtension;
$uploadedFile->move($tmpFolderPathAbs, $tmpImageName);
$tmpImagePathRel = '/uploads/tmp/' . $tmpImageName;
// Create the filtered image in a tmp folder:
$this->container->get('liip_imagine.controller')->filterAction($request, $tmpImagePathRel, 'my_filter');
unlink($tmpFolderPathAbs . $tmpImageName);
$filteredImagePathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/cache/my_filter/uploads/tmp/' . $tmpImageNameNoExt . '.jpeg';
$imagePath = $imageManagerResponse->headers->get('location');
// define permanent location ($permanentImagePathAbs)...
rename($filteredImagePathAbs, $permanentImagePathAbs);
}
}

我在app / config / config.yml中的过滤器如下:
liip_imagine:
filter_sets:
my_filter:
format: jpeg
filters:
strip: ~
thumbnail: { size: [1600, 1000], mode: inset }

A similar question was asked for the ImagineAvalancheBundle,但是没有给出太多细节。也许实现 another service from the here provided list是更好的解决方案?

最佳答案

因此,这是一种使用LiipImagineBundle在上传时创建缩略图的方法。诀窍是使用其他一些服务:

    /**
* Write a thumbnail image using the LiipImagineBundle
*
* @param Document $document an Entity that represents an image in the database
* @param string $filter the Imagine filter to use
*/
private function writeThumbnail($document, $filter) {
$path = $document->getWebPath(); // domain relative path to full sized image
$tpath = $document->getRootDir().$document->getThumbPath(); // absolute path of saved thumbnail

$container = $this->container; // the DI container
$dataManager = $container->get('liip_imagine.data.manager'); // the data manager service
$filterManager = $container->get('liip_imagine.filter.manager');// the filter manager service

$image = $dataManager->find($filter, $path); // find the image and determine its type
$response = $filterManager->get($this->getRequest(), $filter, $image, $path); // run the filter
$thumb = $response->getContent(); // get the image from the response

$f = fopen($tpath, 'w'); // create thumbnail file
fwrite($f, $thumb); // write the thumbnail
fclose($f); // close the file
}

如果您没有其他理由包括LiipImagineBundle,也可以通过直接调用Imagine库函数来完成。我可能会在将来进行研究,但这对我的情况有效,并且效果很好。

关于symfony - 上传后使用LiipImagineBundle调整图像大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com