2016-03-15 6 views
5

Я использую следующую функцию для изменения размера изображений после загрузки, чтобы показывать на моем посте. , но он работает только для изображений размером более 500 пикселей 300 пикселей. когда я загружаю изображение, меньшее этого размера, моя страница изображений сайта разбивается.Как изменить размер изображения путем расширения в yii2

use yii\imagine\Image;  
public function upload() { 
      $this->pictureFile->saveAs('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 

      Image::thumbnail('../files/upload/' . $this->pictureFile, 500, 300) 
        ->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, 
          ['quality' => 70]); 
      unlink('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 
     } 
+0

Попробуйте дать режим собственности на миниатюру. 'Image :: thumbnail ('../ files/upload /'. $ This-> pictureFile, 500, 300, \ Imagine \ Image \ ManipulatorInterface :: THUMBNAIL_INSET)' –

+0

этот код не работает для изображений размером менее 500 пикселей 300 пикселей , –

+0

Как изменить размер небольших изображений на 500 пикселей 300 пикселей? –

ответ

1

метод использования изменения размера, как показано ниже

use yii\imagine\Image; 
use Imagine\Image\Box; 

public function upload() { 
     $this->pictureFile->saveAs('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 

     Image::thumbnail('../files/upload/' . $this->pictureFile, 500, 300) 
       ->resize(new Box(500,300)) 
       ->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, 
         ['quality' => 70]); 
     unlink('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 
    } 
+0

Большое спасибо. это было очень полезно –

+0

не могли бы вы проголосовать за вопрос? Я вопрос запрет :-( –

4

Вместо Image::thumbnail, попробуйте следующее

$imagine = Image::getImagine(); 
$image = $imagine->open('../files/upload/' . $this->pictureFile); 
$image->resize(new Box(500, 300))->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, ['quality' => 70]); 

не проверял, но так как Yii; Image просто обертка над Imagine библиотекой, это должно работать с небольшими изменениями (если вообще нужно) ,

И да, вам необходимо указать use Imagine\Image\Box; в вашем файле перед использованием приведенного выше кода.

1
Yii::setAlias('newsfolder', dirname(dirname(__DIR__)) . '/frontend/web/extraimages/'); 

    $model->img = UploadedFile::getInstance($model,'img'); 
    if (!empty($model->img)){ 
     $model->img->saveAs(Yii::getAlias('@newsfolder/').$filename.'.'.$model->img->extension); 
     $model->img = $filename.'.'.$model->img->extension; 
     $imagine = Image::getImagine(); 
     $image = $imagine->open(Yii::getAlias('@newsfolder/'.$model->img)); 
     $image->resize(new Box(500, 300))->save(Yii::getAlias('@newsfolder/'.$model->img, ['quality' => 70])); 
    } 
0
$imagine = Image::getImagine(); 
     $imagine = $imagine->open($openPath); 
     $sizes = getimagesize ($openPath); 
     /*     
      [0] => 604 
      [1] => 244 
      [2] => 3 
      [3] => width="604" height="244" 
      [bits] => 8 
      [mime] => image/png 
     ) */ 
     $width = 200; 
     $height = round($sizes[1]*$width/$sizes[0]);   
     $imagine = $imagine->resize(new Box($width, $height))->save($savePath, ['quality' => 60]); 

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

  • Нет связанных вопросов^_^