如何通过 imagine 扩展在 yii2 中调整图像大小
How to resize image by imagine extension in yii2
上传后我使用波纹管功能调整图像大小以显示在我的 post 上。
但它仅适用于大于 500px 300px 的图像。当我上传小于此尺寸的图片时,我的网站图片行会崩溃。
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);
}
而不是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;
。
使用如下调整大小的方法
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);
}
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]);
上传后我使用波纹管功能调整图像大小以显示在我的 post 上。 但它仅适用于大于 500px 300px 的图像。当我上传小于此尺寸的图片时,我的网站图片行会崩溃。
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);
}
而不是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;
。
使用如下调整大小的方法
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);
}
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]);