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