我正在使用Yii2扩展程序Imagine,我需要从用户上传中制作150x150
张图片。
目前我正在做这样的事情:
use yii\imagine\Image;
....
Image::thumbnail($save_path, $img_size, $img_size)->save($save_path);
显然,如果其中一个尺寸是< 150px
一旦调整大小。
所以我想要主要弄清楚的是如何在调整大小之前将图像裁剪为正方形 ,这样当我调整它的大小时不会成为任何宽高比问题。
现在,我知道您可以使用以下内容裁剪图像:
Image::crop($save_path, $img_size, $img_size, [5, 5]);
但问题是在之前执行此操作调整图像大小可能无法提供您想要的内容,因为图像可能非常大并且在调整大小后将其裁剪掉。因为一个维度可能已经减少到< 150px
。
所以我想要解决的是如何在调整大小之前裁剪图像 最大尺寸正方形和从中心出来?
修改
好的,我已经找到了解决这个问题的方法,但是想知道是否有任何方法可以轻松完成以下操作,或者我是否需要自己编写代码?
答案 0 :(得分:1)
另一次尝试:p
<?php
use yii\imagine\Image;
use Imagine\Image\Box;
use Imagine\Image\Point;
// ...
$thumbnail = Image::thumbnail($save_path, $img_size, $img_size);
$size = $thumbnail->getSize();
if ($size->getWidth() < $img_size or $size->getHeight() < $img_size) {
$white = Image::getImagine()->create(new Box($img_size, $img_size));
$thumbnail = $white->paste($thumbnail, new Point($img_size / 2 - $size->getWidth() / 2, $img_size / 2 - $size->getHeight() / 2));
}
$thumbnail->save($save_path);
答案 1 :(得分:0)
你不能只使用Image :: thumbnail()的第四个参数吗?
Image::thumbnail($save_path, $img_size, $img_size, Image\ImageInterface::THUMBNAIL_INSET)->save($save_path);
来自http://www.yiiframework.com/doc-2.0/yii-imagine-baseimage.html#thumbnail()-detail:
如果缩略图模式是ImageInterface :: THUMBNAIL_INSET,则原始 图像按比例缩小,因此它完全包含在缩略图中 尺寸。剩下的就是背景 通过yii \ imag \ Image配置:$ thumbnailBackgroundColor和 YII \想象\图片:: $ thumbnailBackgroundAlpha。