Я пытаюсь уменьшить размер изображения, загруженного пользователями во время загрузки.
Это не проблема, но сейчас я хочу уточнить размеры.
Мне нужен совет по алгоритму, который я изо всех сил пытаюсь создать, который будет принимать изображение любой формы - квадрат или прямоугольник любой ширины / высоты и уменьшать его.
Это изображение необходимо уменьшить до размера целевого окна (это изменяется, но сохраняется в переменной).
Поэтому необходимо уменьшить размер изображения так, чтобы и ширина, и высота были больше, чем ширина и высота целевого объекта. сохранение соотношения сторон. но только ..
Целевой размер будет использоваться для обрезки изображения, чтобы не было пустого пространства по краям и т. д.
Я ищу только алгоритм создания правильного изменения размера на основе изображений разных размеров - я могу обрабатывать кадрирование, даже изменять размер в большинстве случаев, но в некоторых случаях это не удается, поэтому я обращаюсь к нему.
Я действительно не прошу PHP-код более псевдо. Очевидно, что все в порядке.
Спасибо, пожалуйста.
Текущий код .. но я прошел так много итераций, что это может вообще не работать ..: P
$image = $image_orig->clone();
$wRatio = $imageprops['width'] / $dimensions[0]; // imageprops = original image dimens.
$hRatio = $imageprops['height'] / $dimensions[1]; // $dimensions[0] = new width
$maxRatio = max($wRatio,$hRatio); // $dimensions[1] = new height
var_dump('thumb');
$ratio = ($imageprops['width'] - $dimensions[0]) > ($imageprops['height'] - $dimensions[1]);
$shape = ($imageprops['width'] > $imageprops['height']);
$error = ($imageprops['width'] / $imageprops['height']);
if( $error < 0.95 || $error > 1.05 ) { // its NOT a square
if($shape){ // longer width
$scale = $imageprops['height'] / $dimensions[0];
var_dump('1');
$height = $imageprops['height'] / $scale;
$image->scaleImage(0, $height);
} else {
$scale = $imageprops['width'] / $dimensions[1];
var_dump('2');
$width = $imageprops['width'] / $scale;
$image->scaleImage($width, 0);
}
} elseif($ratio) { // is square
$scale = $imageprops['height'] / $dimensions[1];
$newWidth = $imageprops['width'] / $scale;
$extra = 0;
$height = $dimensions[1]+$extra;
$image->scaleImage(0, $height);
} else {
$scale = $imageprops['width'] / $dimensions[0];
$newHeight = $imageprops['height'] / $scale;
$extra = 0;
$width = $dimensions[0]+$extra;
$image->scaleImage($width, 0);
}
$image_size = $image->getImageGeometry();
$image->cropImage($dimensions[0], $dimensions[1],($image_size['width']-$dimensions[0])/2,($image_size['height']-$dimensions[1])/2);