Beispiel #1
0
 /**
  * создает миниатюру из картинких
  * @param string $file_path - путь к картинке
  * @param string $file_name - имя исходного файла картинки
  * @param integer $thumb_width - ширина миниатюры
  * @param integer $thumb_height - высота миниатюры
  * @param string $tmb_prefix - префикс для файла миниатюры
  * @return bool
  * @throws \Exception
  */
 public static function createTmb($file_path, $file_name, $thumb_width, $thumb_height, $tmb_prefix = '')
 {
     if ($tmb_prefix == '') {
         $tmb_prefix = Yii::$app->params['tmb-prefix'];
     }
     //подготавливаем пути
     $img_path = $file_path . '/' . $file_name;
     $tmb_path = $file_path . '/' . $tmb_prefix . $file_name;
     //загружаем картинку
     $img = new SimpleImage();
     $img->load($img_path);
     $img->quality = 100;
     //получаем информацию по изображению
     $original_info = $img->get_original_info();
     //рассчитываем параметры миниатюры для пропорционального уменьшения фото
     switch ($original_info['orientation']) {
         case 'landscape':
             $tmb_width = (int) $thumb_width;
             $tmb_height = (int) $original_info['height'] / $original_info['width'] * $thumb_width;
             break;
         case 'portrait':
             $tmb_height = (int) $thumb_height;
             $tmb_width = (int) $original_info['width'] / $original_info['height'] * $thumb_height;
             break;
         default:
             //это если картинка квадратная
             $tmb_width = (int) $thumb_width;
             $tmb_height = $tmb_width;
     }
     //создаем миниатюру
     $img->resize($tmb_width, $tmb_height)->save($tmb_path);
     return true;
 }
 /**
  * загражает файл аватарки и создает миниатюру для него
  * @return bool
  */
 public function uploadFoto()
 {
     $photo = UploadedFile::getInstance($this, 'photo');
     //echo'<pre>';print_r($photo);echo'</pre>';die;
     if ($photo && $photo->tempName) {
         $this->photo = $photo;
         //echo'<pre>';print_r($this->photo);echo'</pre>';//die;
         //$img_path = $this->photo->tempName . DIRECTORY_SEPARATOR . $this->photo->name;
         //echo'<pre>';var_dump($this->validate());echo'</pre>';//die;
         //echo'<pre>';print_r($this);echo'</pre>';die;
         if ($this->validate()) {
             //echo'<pre>';print_r($this->image);echo'</pre>';die;
             $filename = DStringHelper::buildFileName($this->photo->name);
             $path = $this->avatarsPath;
             $tmp_path = Yii::getAlias('@frontend') . DIRECTORY_SEPARATOR . 'web' . DIRECTORY_SEPARATOR . 'tmp';
             $tmp_file = $tmp_path . DIRECTORY_SEPARATOR . $filename;
             $this->photo->saveAs($tmp_file);
             //загружаем картинку
             $img = new SimpleImage();
             $img->load($tmp_file);
             //получаем информацию по изображению
             $original_info = $img->get_original_info();
             //echo'<pre>';print_r($original_info);echo'</pre>';die;
             if ($original_info['orientation'] != 'square') {
                 Yii::$app->session->setFlash('error', 'К загрузке допускаются только квадратные фото');
                 unlink($tmp_file);
                 return false;
             } else {
                 //если было прикреплено фото - то удаляем его
                 if ($this->foto != '') {
                     $this->deleteImageFiles();
                 }
                 // перемещаем фото из временного каталога
                 rename($tmp_file, $path . DIRECTORY_SEPARATOR . $filename);
             }
             //$this->photo->saveAs( $path . DIRECTORY_SEPARATOR . $filename);
             $this->foto = $filename;
             //echo'<pre>';print_r($path . DIRECTORY_SEPARATOR . $filename);echo'</pre>';die;
             DImageHelper::createTmb($path, $filename, Yii::$app->params['poker-tmb-image-res']['width'], Yii::$app->params['poker-tmb-image-res']['height']);
             $this->photo = null;
         } else {
             Yii::$app->session->setFlash('error', 'Ошибка загрузки фото');
             return false;
         }
     }
     return true;
 }