【问题标题】:What is the best way for creating thumbnail from an existing image从现有图像创建缩略图的最佳方法是什么
【发布时间】:2019-11-17 20:00:21
【问题描述】:

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

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

第二个是当我上传帖子图片时,我为缩略图制作了第二个版本,并称之为 THUMBNAIL_1562572708.jpg。

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

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

ـــــــــــــــــ

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

你需要安装这些很棒的包

composer require intervention/image intervention/imagecache

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

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

我想你的图片在 public/images 中!

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

...
'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' }}" />

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

【问题讨论】:

  • 我总是选择第二个,因为它给了我更多的控制权,而且存储比带宽便宜(尤其是对用户而言)。提供现有图像也比获取原始图像、调整大小、将其写入内存和/或磁盘然后提供它要快得多。这可能取决于您可以节省哪些资源。性能不是问题?去第一个。存储不是问题?去第二个。
  • @Loek 当您说存储比带宽便宜时,这是一个很好的提示,您是对的,尤其是当我半小时前看到一个答案时,有人说将宽度为 3000 像素的图像调整为 300 像素可能需要一张图像大约需要 32 MB 的 RAM?这太过分了。
  • 你必须在某个时候调整大小,3000px 很多,不要小看。所以内存成本就在那里。是时候担心cpu了。创建 1 个 800 像素照片的拇指并不是那么昂贵,但创建 25 个拇指却是。特别是如果您必须为每个请求都这样做。

标签: php laravel image thumbnails crop


【解决方案1】:

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

一般来说,您应该选择在上传图像期间生成的单独缩略图,或者在上传图像后在后台生成的缩略图更好。使用 Laravel 队列系统,这非常简单。原因很简单,在cmets中已经提到:

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

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

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

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

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


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

【讨论】:

  • 非常感谢你,这是一个很好的答案,我会根据它来工作,但是缩略图生成器是什么意思,当我上传图像并创建不同尺寸的缩略图时,你的意思是吗?
  • 嗯,缩略图生成器基本上只是一个实用程序,它可以从正常大小的图像创建更小的图像。它是如何做到的,这是非常具体的实现方式,并且已经有很多 Laravel 包可以解决这个问题。这种生成器是生成一个缩略图还是生成多个不同大小的缩略图,在一定程度上取决于您的需求。例如,如果您有全尺寸视图、轮播视图和列表视图,则可能需要 3 种不同的尺寸。但这基本上取决于你。
  • 我明白了,我的意思差不多了,谢谢你的关注。
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 2010-09-06
  • 2015-06-15
  • 2021-07-13
  • 1970-01-01
  • 2017-03-19
  • 2011-07-09
相关资源
最近更新 更多