首頁  >  文章  >  php框架  >  怎麼在ThinkPHP專案裡加入圖片尺寸動態裁切功能

怎麼在ThinkPHP專案裡加入圖片尺寸動態裁切功能

藏色散人
藏色散人轉載
2021-04-08 16:18:032348瀏覽

以下由thinkphp教學欄位介紹在ThinkPHP專案裡加入圖片尺寸動態裁切功能,希望對需要的朋友有幫助!

怎麼在ThinkPHP專案裡加入圖片尺寸動態裁切功能

在ThinkPHP 專案裡加入圖片尺寸動態裁切功能

ThinkPHP 圖片動態裁切縮放庫

先附上項目網址: https://github.com/top-think/think-glide

Glide 是一個可以幫助你根據指定參數動態的生成圖片內容給瀏覽器的圖片操作庫,從而實現
圖片動態裁剪,打水印等,本庫對Glide 進行了一些友好的包裝與擴展,屏蔽了原生庫的一些底層抽象從而使得ThinkPHP 用戶可以在ThinkPHP 項目中
更好的添加圖片的動態裁剪功能。

Installation

執行下面指令安裝:

$ composer require slince/think-glide

Usage

Quick start

由於從ThinkPHP 5.1.6 開始加入了中間件的功能,所以在

  • ThinkPHP 5.1.6 以上版本使用middleware 註冊:

    開啟application/middleware.php 檔案(如果不存在建立即可),註冊middleware:

    return [
        //...
    
        \Slince\Glide\GlideMiddleware::factory([
            'source' => __DIR__ . '/../img',
        ])
    ];

    這種方式比較簡單,也是建議的方式;

  • ThinkPHP 5.1.0 以上5.1.6 以下版本:

    不支援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');
        });
    }

source 是你本地圖片文件夾的位置,假設該目錄下有圖片user.jpg, 開啟瀏覽器存取下面連結:

http://youdomain.com/images/user.jpg?w=100&h=100

即可得到縮小後的圖片。

參數說明

##說明是否必選source#string本機資料夾位置#是快取檔案位置,預設在runtime/glide快取時間,範例 2 daysstring##onExceptioncallable 異常處理handler否string路由前綴,當配對到該前綴時中間件開始執行,預設是/images
參數名稱 #類型
##cache string
下面 cacheTime string
, 快取期間多次要求會自動回應304 #signKey
安全簽章 #否
baseUrl

#否


安全簽章

##不開啟安全性簽章的情況下使用者可以調整query裡面的參數自行對圖片進行裁剪,如果你不打算這麼做的話,你可以透過

signKey

進行校驗,

\Slince\Glide\GlideMiddleware::factory([
    'source' => __DIR__ . '/../img',
    'signKey' => 'v-LK4WCdhcfcc%jt*VC2cj%nVpu+xQKvLUA%H86kRVk_4bgG8&CWM#k*'
])

這種情況下使用者自行調整參數將會無效;產生安全的URL:<pre class="brush:php;toolbar:false">echo app('glide.url_builder')-&gt;getUrl('user.jpg', ['w' =&gt; 100, 'h' =&gt; 100]); //你会得到如下链接:/images/user.jpg?w=100&amp;h=100&amp;s=af3dc18fc6bfb2afb521e587c348b904</pre>異常處理

#如果使用者存取了一張不存在的圖片或沒有進行安全校驗,系統會拋出異常,你可以透過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 ($exception instanceof \League\Glide\Signatures\SignatureException) {
            $response = new Response('签名错误', 403);
        } else {
            $response = new Response(sprintf('你访问的资源 "%s" 不存在', $request->path()), 404);
        }
        
        return $response;
    }
])

注意該閉包必須傳回一個

think\Response

實例;

Quick reference

不只支援裁剪,glide還支援其它操作,只要傳遞對應參數即可,請參考這裡查看支援的參數:
http://glide.thephpleague.com/1.0/api/ quick-reference/

相關推薦:
最新的10個thinkphp影片教學############

以上是怎麼在ThinkPHP專案裡加入圖片尺寸動態裁切功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除