У меня есть изображения с огромными размерами, я хочу сжать их перед сохранением в базе данных. Вот мой контроллер, есть ли способ сделать это без какого-либо расширения?
public function actionCreate() { $model = new Business; if (isset($_POST['Business'])) { $rnd = rand(0, 9999); $model->attributes = $_POST['Business']; $uploadedFile = CUploadedFile::getInstance($model, 'image'); $fileName = "{$rnd}-{$uploadedFile}"; $model->image = $fileName; if ($model->save()) { $uploadedFile->saveAs(Yii::app()->basePath . '/../img/' . $fileName); $this->redirect(array('view', 'id' => $model->id)); } } $this->render('create', array( 'model' => $model, )); }
1) Вам необходимо загрузить это расширение и подключить его в конфигурации, как в документации. 2) После загрузки исходного файла вам нужно просто вызвать метод resize()
. Это работы. Я проверил это. В вашем случае это будет примерно так:
public function actionCreate() { $model = new Business; if (isset($_POST['Business'])) { $rnd = rand(0, 9999); $model->attributes = $_POST['Business']; $uploadedFile = CUploadedFile::getInstance($model, 'image'); $fileName = "{$rnd}-{$uploadedFile}"; $model->image = $fileName; if ($model->validate()) { $path = Yii::app()->basePath . '/../img/' . $fileName; $uploadedFile->saveAs($path); $image = new EasyImage($path); $thumbPath = Yii::app()->basePath . '/../thumb/' . $fileName; $image->resize(100, 100); $image->save($thumbPath); $model->save(); $this->redirect(array('view', 'id' => $model->id)); } } $this->render('create', array( 'model' => $model, )); }