当前位置: 首页 > 后端技术 > PHP

ThinkPHP项目添加图片大小动态裁剪功能

时间:2023-03-30 03:29:29 PHP

ThinkPHP图片动态裁剪缩放库先附上项目地址:https://github.com/top-think/think-glideGlide是一个可以帮你动态根据给指定参数生成图片内容给浏览器的图片操作库,从而实现图片的动态裁剪、水印等。这个库对Glide做了一些友好的封装和扩展,屏蔽了原生库的一些底层抽象,使得ThinkPHP用户可以使用ThinkPHP项目更好的动态裁剪功能来添加图片。安装执行如下命令安装:$composerrequireslince/think-glideUsageQuickstart由于ThinkPHP5.1.6开始增加了中间件功能,在ThinkPHP5.1.6及以上使用中间件注册:打开application/middleware.php文件(如果不存在则创建),注册中间件:return[//...\Slince\Glide\GlideMiddleware::factory(['source'=>__DIR__.'/../img',])];这种方式比较简单,也是推荐的方式;ThinkPHP5.1.0以上和5.1.6以下:不支持中间件,所以启用过程稍微复杂一点,我们用下面的方法折衷://在/route/route.php中注册如下路由Route::get('images/:file','index/handleImageRequest');//创建动作publicfunctionhandleImageRequest(){$middleware=\Slince\Glide\GlideMiddleware::factory(['source'=>App::getRootPath().'/img',]);return$middleware(app('request'),function(){returnapp('response');});}source是你本地的图片文件假设这个目录下有一张图片user.jpg,打开浏览器,请访问以下链接:http://youdomain.com/images/user.jpg?w=100&h=100获取缩小后的图片。参数说明参数名称类型说明是否必填sourcestring本地文件夹位置为cachestring缓存文件位置,默认在runtime/glide下无cacheTimestring缓存时间,例如+2天,缓存期间多次请求会自动响应304NosignKeystringSecuritysignatureNoonExceptioncallableexceptionhandlinghandlerNobaseUrlstring路由前缀,匹配到前缀时中间件开始执行,默认为/imagesnosecuritysignature如果不启用安全签名,用户可以调整参数在query中自己裁剪图片,如果你不打算这样做的话,可以通过signKey验证,\Slince\Glide\GlideMiddleware::factory(['source'=>__DIR__.'/../img','signKey'=>'v-LK4WCdhcfcc%jt*['w'=>100,'h'=>100]);//你会得到以下链接:/images/user.jpg?w=100&h=100&s=af3dc18fc6bfb2afb521e587c348b904用户访问p时的异常处理图片不存在或者没有进行安全验证,系统会抛出异常,可以通过onException替换默认行为:\Slince\Glide\GlideMiddleware::factory(['source'=>__DIR__.'/../img','signKey'=>'v-LK4WCdhcfcc%jt*VC2cj%nVpu+xQKvLUA%H86kRVk_4bgG8&CWM#k*','onException'=>function(\Exception$exception,$request,$server){if($exceptioninstanceof\League\Glide\Signatures\SignatureException){$response=newResponse('签名错误',403);}else{$response=newResponse(sprintf('您访问的资源“%s”不存在',$request->path()),404);}返回$响应;}])注意闭包必须返回一个think\Response实例;quickreference不仅支持裁剪,glide还支持其他操作,只要对应的Parameter够用,参考这里查看支持的参数:http://glide.thephpleague.com/1.0/api/quick-reference/ChangelogSeeCHANGELOG.mdLicense请参阅麻省理工学院。