intervention-image 拓展程序很棒的一个功能,基于url的图像调整大小+缓存的操作,简直神器。
安装
composer require intervention/image
composer require intervention/imagecache
生成配置文件
php artisan vendor:publish
会生成一个配置文件 /config/imagecache.php
修改配置文件
'route' => 'imagecache', #自定义配置路由前缀,配置完成后通过 /{route}/{template}/{file} (file可以是路径:images/1.jpg 这种,只需要在path的路径中能找到) 'paths' => array( public_path('uploads'), ... ),
#可以多个path,会遍历去检索,但是只会返回找到的第一个文件,所以要注意重名问题
模板
系统自带3个缩略图模板
- small - 120x90
- medium - 240x180
- large - 480x360
如果需要可以在 配置文件中新增自定义模板
使用
比如要访问 /uploads/images/1.jpg 的最小的缩略图(route前缀定义为 imagecache;path定义的文件夹为 uploads的情况下)
<img src="/imagecache/small/images/1.jpg"/>
访问后会基于laravel的cache系统在 /storage/framework/cache/ 中生成图片缓存文件,有效期 配置文件中可改
可能出现的问题
1、笔者做到最后一步,访问图片却报404错误,nginx的,不是laravel的。
把网站配置文件中下面部分注释掉即可,这样图片文件就会走laravel的路由 ,不然会直接走文件路径访问,所以报404
OR /imagecache/small/images/1.jpg/ 这样去引用图片
# location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
# {
# error_log off;
# access_log /dev/null;
# }
2、性能问题
laravel是一个重型框架,每次执行request请求需要载入大量文件(IO请求),加上php每次执行请求都要 重新载入资源、解释php、执行、释放资源;
所以可能造成用这种laravel内执行图片缓存请求处理造成服务器性能压力(1次请求会附带多次额外请求)和 响应时长较长,整体性能还不如直接请求相对较大的图片(将性能压力、请求时间转移到带宽)
OR 开启opcache /swoole插件 来解决请求资源消耗/时长 问题