首页 > 解决方案 > Laravel 中的干预图像大小调整和缓存

问题描述

当我上传图像(例如:)user/1/user_profile_img.jpg时,我希望干预图像创建多个缩略图大小(100x100、、200x200400x400),这些大小将用于不同的页面以提高页面速度得分。

我应该将不同的缩略图大小(100x100,200x200400x400)存储在自定义/cache/文件夹中吗?像' /cache/user/1/user_profile_img-100x100.jpg'?

或者我在使用干预图像缓存调整大小路由访问页面时生成它们,例如:

{{ route('photos/item/100x100/userprofile/user_profile_img.jpg') }}

在blade.php 模板中?

Route::get('photos/item/{size}/{reference}/{photo}', 'ImgController@showImg');

我看到lifetime (optional)干预图像缓存函数中有一个''参数:

$img = Image::cache(function($image) {
   $image->make('public/foo.jpg')->resize(300, 200)->greyscale();
}, 10, true);

缓存中图像回调的生命周期(以分钟为单位)。

是否用于设置图像缓存到期时间?

图片会自动从/cache/文件夹中删除吗?

标签: phplaravelinterventionimage-caching

解决方案


我应该存储不同的缩略图大小 [...] 还是在访问页面时生成它们 [...]?

相对于典型 Web 请求的持续时间,调整图像大小可能需要很长时间。如果速度对您很重要,那么我绝对建议在最初上传图像时保存调整大小的版本,无论是在上传请求本身期间还是在上传控制器操作调度的作业中。

如果您使用 Intervention 包的缓存功能,那么当调整大小的图像最近没有缓存时,您可能最终需要“预热”页面。但是,这取决于您的流量模式、使用的缓存实现以及缓存持续时间。如果您尝试它并且它似乎适用于您的用例,那么使用它没有任何问题。


推荐阅读