2015-11-19 1 views
2

У меня есть изображения с огромными размерами, я хочу сжать их перед сохранением в базе данных. Вот мой контроллер, есть ли способ сделать это без какого-либо расширения?Yii: любой способ сохранить изображения в сжатой форме?

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, 
    )); 
} 
+0

Вы что-то пробовали? [ONE] (http://www.yiiframework.com/wiki/419/image-resize-on-the-fly/), [TWO] (http://www.yiiframework.com/extension/easyimage/) ссылка. [Еще одна] (http://www.yiiframework.com/extension/image/). [И еще один] (http://www.yiiframework.com/extensions/?tag=image+resize) ссылки. –

+0

И почему без расширений? –

+0

Я побывал во всех ссылках перед отправкой моего вопроса, и я действительно хотел использовать это расширение http://www.yiiframework.com/extension/image/, но я не знаю, где поставить эту строку кода. Yii :: импорт ('application.extensions.image.Image'); $ image = new Изображение ('images/test.jpg'); $ image-> размер (400, 100) -> вращать (-45) -> качество (75) -> sharpen (20); $ image-> render(); –

ответ

1

1) Вам необходимо скачать this расширение и подключить его в конфигурации, как в документации. 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, 
    )); 
} 
+0

Я сделал это, и мой рабочий код работает 'if ($ model-> save()) { $ uploadedFile-> saveAs (Yii :: app() -> basePath. '/../img/'. $ Filename); $ image = Yii :: app() -> image-> load (Yii :: app() -> basePath. '/../img/'. $ FileName); $ image-> размер (800, 600); $ image-> save (Yii :: app() -> basePath. '/../img/'. $ FileName); $ this-> redirect (array ('view', 'id' => $ model-> id)); } 'Но он не работает для высокой размерности, Как 7000 * 4000 –

+0

Я попытался загрузить изображение размером 7064 * 4714, и в моих моделях я добавил этот код' maxSize '=> 5120 * 3840' в эту строку, 'array ('image', 'file', 'types' => 'jpg, gif, png', 'allowEmpty' => true, 'maxSize' => 5120 * 3840, 'tooLarge' => 'Файл должен быть меньше 50 МБ ',' safe '=> false,' on '=>' insert, update '), '\t ' Но теперь вместо того, чтобы давать мне сообщение об ошибке, это дает мне эту ошибку. '(!) Неустранимая ошибка: разрешенный размер памяти 134217728 байт исчерпан (пытался выделить 28256 байт) в G: \ www \ ba.dev \ protected \ extensions \ image \ drivers \ Image_GD_Driver.php на строке 77'. Почему это так:/ –

+0

@UsmanIqbal проверьте файл _php.ini_. Попробуйте увеличить следующие параметры: 'upload_max_filesize = 50M; memory_limit = 256M; ' –

Смежные вопросы