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();
 | |
|     }
 | |
| 
 | |
| }
 |