Я использую расширение Yii2 Представить и мне нужно сделать 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
,
Так что я пытаюсь понять, как я могу обрезать изображение до изменение размера до максимальная размер площади возможен а также из центра наружу?
Редактировать:
Хорошо, я разработал способ справиться с этим, но мне было интересно, есть ли какой-либо способ легко выполнить нижеприведенное, или мне нужно будет самому его кодировать?
Еще одна попытка: 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);
Разве вы не можете просто использовать четвертый параметр 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 \ воображать \ Image :: $ thumbnailBackgroundColor и
юй \ представьте \ Image :: $ thumbnailBackgroundAlpha.