request->post(); if ($request) { if(isset($request['old_img'])){ $this->deleteImages($request['old_img']); } $model->file = UploadedFile::getInstance($model, 'file'); if(!$model->file){ return json_encode(["error"=>"Не указан файл"]); } $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 { $p1[0] = ""; return json_encode(['success','initialPreview' => $p1, 'append' => false, 'name' =>$imageLink,]); } } else { return json_encode(['error']); } } public function isBigger($width,$height,$w,$h) { if($width>$w){ return true; }else if($height >$h) { return true; } return false; } public 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); $width = $new_width; }else { $new_height = $height*($e_height/$e1_height); $height = $new_height; } } else { $img->save($imageAliasSave, array('flatten' => false)); return true; } Image::crop($imageAlias, $width, $height,[0,0]) ->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(){ $old_img = Yii::$app->request->post('old_img'); if ($old_img) { $this->deleteImages($old_img); } } }