ThinkPHP-Bibliothek zum dynamischen Zuschneiden und Skalieren von Bildern
Fügen Sie zunächst die Projektadresse hinzu: https://github.com/top-think/think -glide
Glide Es handelt sich um eine Bildbearbeitungsbibliothek, die Ihnen dabei helfen kann, Bildinhalte für den Browser basierend auf angegebenen Parametern dynamisch zu generieren und so dynamische Bildzuschnitte, Wasserzeichen usw. zu realisieren. Diese Bibliothek verfügt über einige benutzerfreundliche Pakete und Erweiterungen für Glide, die das blockieren Einige Abstraktionen auf niedriger Ebene ermöglichen es ThinkPHP-Benutzern, dynamische Zuschneidefunktionen zu Bildern in ThinkPHP-Projekten hinzuzufügen.
Installation
Führen Sie zum Installieren den folgenden Befehl aus:
$ composer require slince/think-glide
Verwendung
Schnellstart
Da die Middleware-Funktion seit ThinkPHP 5.1.6 hinzugefügt wurde, verwenden Sie die Middleware-Registrierung in
- ThinkPHP 5.1.6 und höher. :
-
Öffnen Sie die Datei
application/middleware.php
(erstellen Sie sie einfach, falls sie nicht vorhanden ist), registrieren Sie Middleware:return [ //... \Slince\Glide\GlideMiddleware::factory([ 'source' => __DIR__ . '/../img', ]) ];
Diese Methode ist relativ einfach und empfehlenswert
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 oder höher und 5.1.6 oder niedriger:
unterstützt keine Middleware, daher ist der Aktivierungsprozess etwas komplizierter. Wir gehen auf folgende Weise einen Kompromiss ein:
rrreeesource
Dies ist der Speicherort Ihres lokalen Bildordners. Angenommen, dass sich in diesem Verzeichnis ein Bild user.jpg
befindet, öffnen Sie den Browser und rufen Sie den folgenden Link auf: