从现有图像创建缩略图的最佳方法是什么

What is the best way for creating thumbnail from an existing image

我在数据库中有一个图像列包含我的 posts table 的图像路径,我在两个不同的地方使用该列,一个用于单个 post页面宽度为 800px,高度为 400px,在我的博客页面中,我想使用这些图像,但这次宽度和高度不同(posts 的缩略图).. 我有两个选择,我不确定哪个更好! 第一个我用图像路径、宽度和高度调用函数,因此它 returns 优化版本,老实说,我没有尝试这样做,我不知道后面发生了什么场景我认为它正在服务器上创建缩略图版本?

<img src="{{ resizeImage( url('images/posts/' . $post->image) ), '400', '250') }}" />

第二个是当我上传 post 图片时,我为缩略图制作了第二个版本,并像这样称呼它 THUMBNAIL_1562572708.jpg 例如。

我的问题是关于这样做的性能和最佳实践,任何建议,如果有比这更好的方法请分享我正在使用 Laravel,谢谢。

我认为第二种更好,因为我们在发送请求时不需要调用函数或处理某些东西。 但是这种方式也有一个缺点就是复制文件,我很困惑,实际上:(

ــــــــــــــــــــــــــــ功

嗯!这是一个真实示例的更新,我想与任何需要帮助的人分享。

您将需要安装这些很棒的软件包

composer require intervention/image intervention/imagecache

请阅读有关基于 URL 的图像处理机制 http://image.intervention.io/use/url

发布配置文件后,您需要像这样编辑图像缓存配置文件:

我想你的图片在 public/images!

所以我们将从 public 目录中读取。

...
'route' => 'thumbnails',

...

'paths' => array(
    // From public
    public_path(),
),
...
<img src="{{ 'http://127.0.0.1:8000/your_route_name_that_was_setted_in_imagecache_config_file/your_template_name/images/1.png' }}" />

请注意,您有三个默认模板,小型、中型和大型,当然,您可以制作自己的模板。

这个问题的答案可能非常自以为是,但这是我的两分钱。

一般来说,您应该选择在上传图片时生成的单独缩略图,或者最好是在上传图片后在后台生成。使用 Laravels 队列系统,这非常简单。原因很简单,评论里已经提到了:

  • 缩略图只需要生成一次(在 per-request 基础上生成缩略图会导致繁重的工作量和潜在的性能问题)
  • 存储便宜又快速

缩略图的识别可以通过存储缩略图的文件名来完成,也可以像您已经建议的那样,根据原始文件使用一些逻辑来解析缩略图。就个人而言,我会使用允许您生成各种不同缩略图的文件夹结构,例如:

 images/
    original/
       123456789.jpg
    thumbnail/
       100x100/
          123456789.jpg
       200x200/
          123456789.jpg

目录名100x100200x200当然可以改成适合自己的。使用建议的缩略图对我来说意味着缩略图的宽度不超过 100 像素,也不高于 100 像素。这并不意味着每个缩略图都恰好是 100x100 像素,但如果需要,您也可以实现这样的缩略图生成器。

请注意,如果为此使用后台工作程序,您可能需要一些后备逻辑来显示缩略图,同时缩略图仍在生成中。后备可以是默认图像或通过 HTML.

调整大小的原始图像

顺便说一句,如果你实现了缩略图生成器,你也可以考虑实现图像优化器。大多数图像都可以缩小,而用户不会注意到(显着)差异。这样的系统是否值得,取决于您显示的图像数量以及您网站上的流量。对于使用频繁的网站,这可能是节省一些流量的好主意。一个现有的解决方案是 spatie/image-optimizer(我与 spatie 没有任何关系)。