Heim  >  Artikel  >  PHP-Framework  >  So fügen Sie einem ThinkPHP-Projekt eine dynamische Zuschneidefunktion für die Bildgröße hinzu

So fügen Sie einem ThinkPHP-Projekt eine dynamische Zuschneidefunktion für die Bildgröße hinzu

藏色散人
藏色散人nach vorne
2021-04-08 16:18:032353Durchsuche

In der folgenden Tutorial-Kolumne von thinkphp erfahren Sie, wie Sie eine dynamische Zuschneidefunktion für die Bildgröße in einem ThinkPHP-Projekt hinzufügen. Ich hoffe, dass es für Freunde hilfreich ist, die es benötigen!

So fügen Sie einem ThinkPHP-Projekt eine dynamische Zuschneidefunktion für die Bildgröße hinzu

Fügen Sie die dynamische Zuschneidefunktion der Bildgröße im ThinkPHP-Projekt hinzu

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 进行替换默认行为:

rrreee

注意该闭包必须返回一个 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:

rrreee

source 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:

rrreee
zum Abrufen das verkleinerte Bild.
Parameterbeschreibung

Parametername Typ Beschreibung Ob es ist erforderlich oder nicht
source string Lokaler Ordnerspeicherort Ja
cache string Cache-Dateispeicherort, der Standardwert liegt unter runtime/glide Nein
cacheTime string Cache-Zeit, Beispiel +2 Tage, Cache Mehrere Anfragen während des Zeitraums werden automatisch mit 304 No
signKey string Sichere Signatur td> Nein
onException aufrufbar Ausnahmebehandlungshandler Nein
baseUrl string Routing-Präfix, die Middleware beginnt mit der Ausführung, wenn das Präfix übereinstimmt. Der Standardwert ist /images Nein
Sichere SignaturWenn die sichere Signatur nicht aktiviert ist, kann der Benutzer dies tun Passen Sie die Parameter in der Abfrage an, um das Bild selbst zuzuschneiden. Wenn Sie dies nicht vorhaben, können Sie dies über
signKey überprüfen.
rrreee🎜In diesem Fall die vom Benutzer angepassten Parameter wird ungültig sein; eine sichere URL generieren: 🎜rrreee🎜Ausnahmebehandlung🎜 🎜Wenn der Benutzer auf ein nicht vorhandenes Bild zugreift oder keine Sicherheitsüberprüfung durchführt, löst das System eine Ausnahme aus. Sie können das Standardverhalten durch onException ersetzen : 🎜rrreee🎜Beachten Sie, dass der Abschluss ein thinkResponse-Beispiel zurückgeben muss. 🎜🎜Kurzreferenz🎜🎜Unterstützt nicht nur das Zuschneiden, sondern auch die entsprechenden Parameter um die unterstützten Parameter anzuzeigen: 🎜🎜http://glide.thephpleague com/1.0/api/quick-reference/🎜🎜🎜🎜🎜Verwandte Empfehlungen: 🎜Die neuesten 10 Thinkphp-Video-Tutorials🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonSo fügen Sie einem ThinkPHP-Projekt eine dynamische Zuschneidefunktion für die Bildgröße hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen