ThinkPHP 이미지의 동적 자르기 및 크기 조정 라이브러리
먼저 프로젝트 주소를 첨부하세요: https://github.com/top-think/think -glide
Glide 지정된 매개변수를 기반으로 브라우저용 이미지 콘텐츠를 동적으로 생성하여 동적 이미지 자르기, 워터마킹 등을 실현할 수 있는 이미지 조작 라이브러리입니다. 이 라이브러리에는 Glide에 대한 친숙한 패키징 및 확장 기능이 있어 일부 낮은 수준의 추상화를 통해 ThinkPHP 사용자는 ThinkPHP 프로젝트의 이미지에 동적 자르기 기능을 추가할 수 있습니다.
Installation
다음 명령을 실행하여 설치하세요.
$ composer require slince/think-glide
Usage
빠른 시작
ThinkPHP 5.1.6부터 미들웨어 기능이 추가되었으므로
- ThinkPHP 5.1.6 이상에서는 미들웨어 등록을 사용하세요. :
-
application/middleware.php
파일을 열고(없으면 생성하세요) 미들웨어를 등록하세요.return [ //... \Slince\Glide\GlideMiddleware::factory([ 'source' => __DIR__ . '/../img', ]) ];
로그인 후 복사이 방법은 비교적 간단하고 권장됩니다.
application/middleware.php
文件(如果不存在创建即可),注册 middleware:// 在 /route/route.php 注册下面路由 Route::get('images/:file', 'index/handleImageRequest'); //在控制器 index 里创建action public function handleImageRequest() { $middleware = \Slince\Glide\GlideMiddleware::factory([ 'source' => App::getRootPath() . '/img', ]); return $middleware(app('request'), function(){ return app('response'); }); }
로그인 후 복사这种方式比较简单,也是推荐的方式;
-
ThinkPHP 5.1.0 以上 5.1.6 以下版本:
不支持middleware,所以启用过程要复杂一点,我们用下面方式来妥协:
http://youdomain.com/images/user.jpg?w=100&h=100
로그인 후 복사
source
是你本地图片文件夹的位置,假设该目录下有图片 user.jpg
, 打开浏览器访问下面链接:
\Slince\Glide\GlideMiddleware::factory([ 'source' => __DIR__ . '/../img', 'signKey' => 'v-LK4WCdhcfcc%jt*VC2cj%nVpu+xQKvLUA%H86kRVk_4bgG8&CWM#k*' ])
即可得到缩小后的图片。
参数说明
参数名 | 类型 | 说明 | 是否必选 |
---|---|---|---|
source | string | 本地文件夹位置 | 是 |
cache | string | 缓存文件位置,默认在 runtime/glide 下面 |
否 |
cacheTime | string | 缓存时间,示例 +2 days , 缓存期间多次请求会自动响应 304 |
否 |
signKey | string | 安全签名 | 否 |
onException | callable | 异常处理handler | 否 |
baseUrl | string | 路由前缀,匹配到该前缀时中间件开始执行,默认是 /images
|
否 |
安全签名
不开启安全签名的情况下用户可以调整query里面的参数自行对图片进行裁剪,如果你不打算这么做的话,你可以通过signKey
进行校验,
echo app('glide.url_builder')->getUrl('user.jpg', ['w' => 100, 'h' => 100]); //你会得到如下链接:/images/user.jpg?w=100&h=100&s=af3dc18fc6bfb2afb521e587c348b904
这种情况下用户自行调整参数将会无效;生成安全的URL:
\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 ($exception instanceof \League\Glide\Signatures\SignatureException) { $response = new Response('签名错误', 403); } else { $response = new Response(sprintf('你访问的资源 "%s" 不存在', $request->path()), 404); } return $response; } ])
异常处理
如果用户访问了一张不存在的图片或者没有进行安全校验,系统会抛出异常,你可以通过 onException
进行替换默认行为:
注意该闭包必须返回一个 thinkResponse
ThinkPHP 5.1.0 이상 및 5.1.6 이하:
는 미들웨어를 지원하지 않으므로 활성화 프로세스가 조금 더 복잡합니다.
rrreeesource
이 디렉토리에 user.jpg
사진이 있다고 가정하고, 브라우저를 열고 다음 링크를 방문하세요: