$w){ return true; }else if($height >$h) { return true; } return false; } private function resizeImg($w, $h, $imageAlias,$imageAliasSave){ $img = Image::getImagine()->open(Yii::getAlias($imageAlias)); $size = $img->getSize(); $width = $size->getWidth(); $height = $size->getHeight(); $e_width = $w/$h; $e_height = $h/$w; $e1_width = $width/$height; $e1_height = $height/$width; if($this->isBigger($width,$height,$w,$h)){ if($e_width<$e1_width){ $new_width = $width*($e_width/$e1_width); $y = 0; $x = $width/ 2-($new_width/2); $width = $new_width; }else { $new_height = $height*($e_height/$e1_height); $x = 0; $y = $height/2-($new_height/2); $height = $new_height; } } else { $img->save($imageAliasSave, array('flatten' => false)); return true; } Image::crop($imageAlias, $width, $height,[$x,$y]) ->save(Yii::getAlias($imageAliasSave), ['quality' => 100]); $imagine = new Imagine(); $imagine->open($imageAliasSave) ->resize(new Box($w, $h)) ->save($imageAliasSave, array('flatten' => false)); } private function deleteImages($old_img){ if(!empty($old_img) && file_exists($_SERVER['DOCUMENT_ROOT'].$old_img)){ $rootDir = explode("/", $old_img); $row = $_SERVER['DOCUMENT_ROOT'].'/'.$rootDir[1].'/'.$rootDir[2].'/'; $allFiles = scandir($row); $allFiles = array_slice($allFiles, 2); foreach($allFiles as $oldFile){ unlink($row.$oldFile); } } } public function actionDeleteImage(){ $request = Yii::$app->request->post(); if($request){ if ($request['old_img']) { $this->deleteImages($request['old_img']); } if(isset($request['action']) && $request['action']=='save'){ $object = str_replace('-', '\\',$request['model']); $model = new $object; $model = $model->findOne($request['id']); $model->$request['field'] = $request['new_url']; // print_r($model->validate()); // print_r($model->getErrors()); // die(var_dump($model->save())); $model->save(); } } } public function actionDownloadPhoto() { $model = new ImageSizerForm(); $request = Yii::$app->request->post(); if ($request) { $model->file = UploadedFile::getInstance($model, 'file'); $md5_file = md5_file($model->file->tempName); $imgDir = Yii::getAlias('@storage/'.$md5_file.'/'); $imageOrigAlias = Yii::getAlias($imgDir.'original'.'.'.$model->file->extension); if(!is_dir($imgDir)) { mkdir($imgDir, 0755, true); } $model->file->saveAs($imageOrigAlias); if($request['width'] && $request['height']){ $imageAlias = Yii::getAlias($imgDir.$request['width'].'x'.$request['height'].'.'.$model->file->extension); $imageLink = '/storage/'.$md5_file.'/'.$request['width'].'x'.$request['height'].'.'.$model->file->extension; $this->resizeImg($request['width'], $request['height'], $imageOrigAlias,$imageAlias); } else { $imageLink = '/storage/'.$md5_file.'/'.'original'.'.'.$model->file->extension; } if($model->multi){ $view = $this->renderPartial('@app/components/views/_gallery_item', [ 'item' => ['image'=>$imageLink], ]); return json_encode(['link'=>$imageLink, 'view' =>$view]); } else { return json_encode(['link'=>$imageLink]); } } } public function getex($filename) { return end(explode(".", $filename)); } public function actionImagesUpload(){ if($_FILES['upload']) { if (($_FILES['upload'] == "none") OR (empty($_FILES['upload']['name'])) ) { $message = "Вы не выбрали файл"; } else if ($_FILES['upload']["size"] == 0 OR $_FILES['upload']["size"] > 2050000) { $message = "Размер файла не соответствует нормам"; } else if (($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/png") AND ($_FILES['upload']['type'] != 'image/gif')) { $message = "Допускается загрузка только картинок JPG и PNG."; } else if (!is_uploaded_file($_FILES['upload']["tmp_name"])) { $message = "Что-то пошло не так. Попытайтесь загрузить файл ещё раз."; } else{ $name =rand(1, 1000).'-'.md5($_FILES['upload']['name']).'.'.$this->getex($_FILES['upload']['name']); move_uploaded_file($_FILES['upload']['tmp_name'], "../../storage/images/".$name); $full_path = '/storage/images/'.$name; $message = "Файл ".$_FILES['upload']['name']." загружен"; $size=@getimagesize('images/'.$name); } $callback = $_REQUEST['CKEditorFuncNum']; echo ''; } } /** * @param $mode - int: 0 - fetch from cache, - 1 - put in cache, <2 - delete from cache * @param $data - array * @param $configuration - array * @throws \ErrorException */ protected function parserCacheHandler( $mode, &$data = [], &$configuration = [] ){ switch ( $mode ) { case 0: if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) { $data = json_decode(Yii::$app->getCache()->get('parser_data'), true); $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration')); } else { throw new \ErrorException('Ошибка кеша'); } break; case 1: Yii::$app->getCache()->set('parser_data', json_encode($data), 1800); // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных Yii::$app->getCache()->set('parser_configuration', serialize($configuration), 1800); break; default: if( Yii::$app->getCache()->exists('parser_data') ) Yii::$app->getCache()->delete('parser_data'); if( Yii::$app->getCache()->exists('parser_configuration') ) Yii::$app->getCache()->delete('parser_configuration'); } } }