如何在Laravel5.2中生成缩略图当我显示图像时

时间:2016-01-07 15:53:43

标签: php image laravel thumbnails gdlib

当我写一个代码来显示刀片文件中的图像时,图像缩略图的时间,我可以给出每次高度,宽度,我需要图像那种图像缩略图生成所以我可以生成相同图像的多个拇指在单一网站。

{{$page->image,100,100)}}

或者

<td><?php if ($page->image) { ?><img src="{{ url('/upload/pages/'.$page->image,100,200) }}"/><?php } ?></td>

请提前建议如何制作此类缩略图。

4 个答案:

答案 0 :(得分:0)

这样做的合理方法是:

  1. 创建一个接受图像名称,宽度和宽度的控制器和方法(或现有控制器上的方法)。高度参数。此方法可以使用评论中提到的干预包。逻辑应该是 - 首先检查指定尺寸的图像是否存在,如果不存在 - 创建它(使用干预,非常简单)。然后 - 输出图像内容(不要忘记添加正确的标题)。

  2. 将此控制器/方法添加到routes.php,例如:

    Route :: get('thumbnails / {image}','Controller @ getThumbnail');

  3. 在您的Blade模板中,您只需引用“/path/image.jpg?width=200&height=100”等图片。无需关心具有这些尺寸的文件是否已存在。

  4. PS。 Facebook以这种方式提供图像。它基本上就像用户和原始图像之间的一个小代理服务器(您的方法作为代理)。

答案 1 :(得分:0)

您需要干预,然后在您的上传控制器中输入这样的内容:

...
        $file = $request->file('files');
        $extension = $file->getClientOriginalExtension();
        Storage::disk('local')->put('/'.$file->getFilename().$extension,  File::get($file));

        $thumb1 = ImageManagerStatic::make($file->getRealPath())->resize(200, 200, function ($constraint) {
          $constraint->aspectRatio(); //maintain image ratio
        })->save('thumb1'.$extension);


        $thumb2 = ImageManagerStatic::make($file->getRealPath())->resize(400, 400, function ($constraint) {
          $constraint->aspectRatio(); //maintain image ratio
        })->save('thumb2'.$extension);

...

答案 2 :(得分:0)

您可以使用微服务动态调整该图像的大小,并将缩略图缓存在CDN中。请看一下here

<img src="{{ imgProxy('https://your-microservice.com/your-image.jpg', 100, 200) }}"/>

答案 3 :(得分:0)

记录一下,如果您使用Laravel,一个不错的选择是使用干预/图像和干预/图像缓存包。

Intervention Image Docs的“基于URL的图像处理”部分介绍了您需要的内容。