96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace addons\cropper\controller;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use think\addons\Controller;
							 | 
						||
| 
								 | 
							
								use think\Config;
							 | 
						||
| 
								 | 
							
								use think\Hook;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 图片裁剪
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Index extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected $model = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function _initialize()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // 语言检测
							 | 
						||
| 
								 | 
							
								        $lang = $this->request->langset();
							 | 
						||
| 
								 | 
							
								        $lang = preg_match("/^([a-zA-Z0-9\-_]{2,10})\$/i", $lang) ? $lang : 'zh-cn';
							 | 
						||
| 
								 | 
							
								        $site = Config::get("site");
							 | 
						||
| 
								 | 
							
								        $upload = \app\common\model\Config::upload();
							 | 
						||
| 
								 | 
							
								        // 上传信息配置后
							 | 
						||
| 
								 | 
							
								        Hook::listen("upload_config_init", $upload);
							 | 
						||
| 
								 | 
							
								        // 配置信息
							 | 
						||
| 
								 | 
							
								        $config = [
							 | 
						||
| 
								 | 
							
								            'site'           => array_intersect_key($site, array_flip(['name', 'cdnurl', 'version', 'timezone', 'languages'])),
							 | 
						||
| 
								 | 
							
								            'upload'         => $upload,
							 | 
						||
| 
								 | 
							
								            'modulename'     => 'addons',
							 | 
						||
| 
								 | 
							
								            'controllername' => 'index',
							 | 
						||
| 
								 | 
							
								            'actionname'     => $this->request->action(),
							 | 
						||
| 
								 | 
							
								            'jsname'         => 'cropper',
							 | 
						||
| 
								 | 
							
								            'moduleurl'      => rtrim(url("/index", '', false), '/'),
							 | 
						||
| 
								 | 
							
								            'language'       => $lang
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $config = array_merge($config, Config::get("view_replace_str"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Config::set('upload', array_merge(Config::get('upload'), $upload));
							 | 
						||
| 
								 | 
							
								        // 配置信息后
							 | 
						||
| 
								 | 
							
								        Hook::listen("config_init", $config);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->view->assign('jsconfig', $config);
							 | 
						||
| 
								 | 
							
								        $this->view->assign('site', $site);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        parent::_initialize();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->view->fetch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 图片剪裁
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function cropper()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $config = get_addon_config('cropper');
							 | 
						||
| 
								 | 
							
								        $get = $this->request->get();
							 | 
						||
| 
								 | 
							
								        $allowAttr = [
							 | 
						||
| 
								 | 
							
								            'aspectRatio',
							 | 
						||
| 
								 | 
							
								            'autoCropArea',
							 | 
						||
| 
								 | 
							
								            'cropBoxMovable',
							 | 
						||
| 
								 | 
							
								            'cropBoxResizable',
							 | 
						||
| 
								 | 
							
								            'minCropBoxWidth',
							 | 
						||
| 
								 | 
							
								            'minCropBoxHeight',
							 | 
						||
| 
								 | 
							
								            'minContainerWidth',
							 | 
						||
| 
								 | 
							
								            'minContainerHeight',
							 | 
						||
| 
								 | 
							
								            'minCanvasHeight',
							 | 
						||
| 
								 | 
							
								            'minCanvasWidth',
							 | 
						||
| 
								 | 
							
								            'croppedWidth',
							 | 
						||
| 
								 | 
							
								            'croppedHeight',
							 | 
						||
| 
								 | 
							
								            'croppedMinWidth',
							 | 
						||
| 
								 | 
							
								            'croppedMinHeight',
							 | 
						||
| 
								 | 
							
								            'croppedMaxWidth',
							 | 
						||
| 
								 | 
							
								            'croppedMaxHeight',
							 | 
						||
| 
								 | 
							
								            'containerMinHeight',
							 | 
						||
| 
								 | 
							
								            'containerMaxHeight',
							 | 
						||
| 
								 | 
							
								            'customWidthHeight',
							 | 
						||
| 
								 | 
							
								            'customAspectRatio'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $attr = array_intersect_key($get, array_flip($allowAttr));
							 | 
						||
| 
								 | 
							
								        foreach ($attr as $index => &$item) {
							 | 
						||
| 
								 | 
							
								            $item = floatval($item);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $config = array_merge($config, $attr, ['url' => $get['url'] ?? '', 'fillColor' => $get['fillColor'] ?? '']);
							 | 
						||
| 
								 | 
							
								        $config['fillColor'] = $config['fillColor'] && $config['fillColor'] !== 'transparent' ? '#' . ltrim($config['fillColor'], '#') : 'transparent';
							 | 
						||
| 
								 | 
							
								        $this->view->assign("cropper", $config);
							 | 
						||
| 
								 | 
							
								        return $this->view->fetch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |