将图像从中心裁剪成Yii2 Imagine中可以制作的最大正方形?

时间:2017-03-04 17:19:09

标签: php yii2 imagick php-imagine gmagick

我正在使用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

所以我想要解决的是如何在调整大小之前裁剪图像 最大尺寸正方形从中心出来?

修改

好的,我已经找到了解决这个问题的方法,但是想知道是否有任何方法可以轻松完成以下操作,或者我是否需要自己编写代码?

  • 计算出最小尺寸(宽度或高度)
  • 然后选择那个维度,那将是你可以拥有的最大的广场
  • 找出如何将其定位在作物的中心
  • 现在你可以进行调整大小
  • 如果调整大小后任一侧小于150,请创建新的白色背景图像,然后将新图像居中于该
  • 保存图片
  • 完成!

2 个答案:

答案 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。