ThinkPhp5动态裁剪

2021.03.08
评论

ThinkPhp5.1.4之think-glide动态裁剪

一.安装

composer require slince/think-glide:0.0.1

默认安装的版本是支持tp6的,需要手动安装0.0.1版本来支持tp5

二.配置

2-1基础全局配置

  1. 在application文件夹下找到middleware.php文件(如果没有,手动创建即可)

  2. 在application文件夹下创建images文件夹(此文件夹作为模块入口,内部为空)

  3. 在文件中写入

    <?php
    return [
    	\Slince\Glide\GlideMiddleware::factory([
    	    'source' => '../public/uploads',
    	])
    ];

    更多参数配置请访问:think-glide

  4. 完成上述即可使用

    // 假设静态资源文件夹public/uploads存在2.jpg图片,则方法访问如下
    http://xx.com/images/2.jpg?w=100&h=100 // w h 为裁剪后的图片高宽

    2-2单独配置

    很多情况下,我们的后端图片并不在同一个目录下,也就导致全局配置无法正常运行,故推荐以下写法

  5. 在application文件夹下创建images文件夹,内部创建controller文件夹,其内创建Index.php,完整路径如下

    application->images->controller->Index.php
    
  6. Index.php中写入

    <?php
    namespace application\images\controller;
    use think\Controller;
     
    class Index extends Controller{
    	public function handleImageRequest()
    	{
            // 我这里以path传入参数来动态设置路径
    		$path = input('path');
    	    $middleware = \Slince\Glide\GlideMiddleware::factory([
    	        'source' => './uploads/'.$path,
    	    ]);
    	    return $middleware(app('request'), function(){
    	        return app('response');
    	    });
    	}
    }
  7. 在项目根目录下的route->route.php文件中添加

    //....
    Route::get('images/:file', 'images/index/handleImageRequest');
  8. 完成上述即可使用

    // 假设静态资源文件夹public/uploads/img下存在2.jpg图片,则方法访问如下
    http://xx.com/images/2.jpg?path=img&w=100&h=100 // path为指定子目录名称, w h 为裁剪后的图片高宽
    

三.其他

think-glide还有其他图片处理操作,详情点击

图片裁剪后的缓存文件在项目根目录下的runtime->glide,默认两天过期

频繁同ip进行同文件操作会导致请求拉黑,请注意