Как изменить размер изображения с помощью расширения imagine в yii2
Я использую функцию bellow для изменения размера изображений после загрузки, чтобы показать на моем посте.
но он работает только для изображений размером более 500px 300px. когда я загружаю изображение меньше этого размера, строка изображений моего сайта ломается.
use yiiimagineImage;
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);
}
4 ответов:
Используйте метод изменения размера, как показано ниже
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); }
Вместо
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;в вашем файле перед использованием кода выше.
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])); }
$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]);
Comments