基於 URL 的縮圖在 Laravel 中的實現

yongqiangdou發表於2020-05-11

網站開發常會遇到縮圖的問題,一個文章可能會有幾種大小的縮圖,一般會在上傳圖片的時候後臺程式碼自動生成幾種縮圖,這種方式就需要一次生成很多圖片,今天介紹一種基於URL動態生成縮圖的方式,大家可以沿著這個方向去探索基於URL的圖片處理等。

先來看看啥叫基於URL動態生成縮圖。
/resize/<strong>400x200</strong>/images/thumb/e8ad3e43e64462c80e7f43fc51f7f948.jpg>400x200/images/thumb/e8ad3e43e64462c80e7f43fc51f7f948.jpg
我們改變上述連結中的400x200得到一個400x200的圖片,改變為100x100得到一個100x100大小的圖片,這個就是基於URL動態生成縮圖,後臺只要儲存一張原圖即可。

下面就說下如何使用此方式:

1.安裝intervention/image和intervention/imagecache包。

composer require intervention/image
composer require intervention/imagecache

2.釋出報配置。在config資料夾下找到imagecache.php

<?php
return array(
    'route' => 'resize',
    'paths' => array(
        public_path('upload'),
        public_path('images')
    ),
    'templates' => array(
        '400x200' => 'App\Filters\MyFilter'
    ),
    'lifetime' => 43200,

);

3.配置imagecache.php檔案中的

'route' => 'resize'

4.定義資原始檔夾

'paths' => array( 'storage/uploads/images', public_path('img') )

5.修改

'templates' => array('400x200' => 'App\Filters\MyFilter'),

6.定義App\Filters\MyFilter

<?php
namespace App\Filters;
use Intervention\Image\Image;
use Intervention\Image\Filters\FilterInterface;
class MyFilter implements FilterInterface {
      public function applyFilter(Image $image) {
             return $image->fit(400,  200);
      }
}

7.配置Lifetime

'lifetime' => 43200

現在就可以通過上述的url訪問到自定義的縮圖了

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章