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

时间:2019-07-08 10:06:12

标签: php laravel image thumbnails crop

我在数据库中有一个图像列,其中包含我的帖子表的图像路径,我在两个不同的地方使用该列,一个用于宽度为800px,高度为400px的单个帖子页面我想使用这些图像,但是这次使用不同的宽度和高度(帖子的缩略图)。 我有两种选择,我不确定哪一种更好! 我用图像路径,宽度和高度调用了第一个函数,因此它返回了优化的版本,说实话,我没有尝试这样做,也不知道幕后发生了什么,我认为这是在服务器上创建缩略图版本?

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

第二个是当我上传帖子图像时,我为缩略图制作了第二个版本,并以这样的方式命名为THUMBNAIL_1562572708.jpg。

我的问题是关于执行此操作的性能和最佳实践,任何建议以及是否有比这更好的方法,请与我分享。我使用的是Laravel,谢谢。

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

1 个答案:

答案 0 :(得分:1)

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

通常,您应该选择在图像上传期间生成的单独缩略图,或者最好在上传图像后在后台生成缩略图。使用Laravels队列系统,这非常简单。原因很简单,并且已经在评论中提到了:

  • 缩略图仅需要生成一次(按请求生成缩略图会导致繁重的工作量和潜在的性能问题)
  • 存储便宜又快速

缩略图的标识可以通过存储缩略图的文件名来完成,或者如您已经建议的那样,通过使用一些逻辑来基于原始文件解析缩略图来完成。就个人而言,我将使用一种文件夹结构,该结构可让您生成各种不同的缩略图,例如:

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

当然可以将目录名100x100200x200更改为适合您的名称。使用建议的参数对我而言意味着缩略图的宽度不大于100px,也不大于100px。这并不意味着每个缩略图都完全是100x100像素,尽管您也可以根据需要实现这种缩略图生成器。

请注意,如果您使用后台工作程序,则可能需要一些后备逻辑来显示仍在生成缩略图的缩略图。备用广告可以是默认图片,也可以是通过HTML调整的原始图片。


顺便说一句,如果实现缩略图生成器,则可以考虑同时实现图像优化器。可以缩小大多数图像,而无需用户注意(明显)差异。这样的系统是否值得,取决于显示的图像数量以及站点上的流量。对于频繁使用的网站,这可能是节省流量的好主意。目前的解决方案是spatie/image-optimizer(我与spatie没有任何关联)。