Скрипт для того, чтобы привести все изображения к единому соотношению сторон без растяжения (наложение на белый фон)
Но, почему-то на деле имеется погрешность в несколько пикселей в соотношении сторон. Как её исправить?
<?php
$fnamefoto = $_GET['name'];
$img = new Imagick();
$img->readImage('/var/www/localhost/files/images/'.$fnamefoto);
$img->setImageFormat('jpeg');
$val = $img->getImageWidth() / $img->getImageHeight();
if ($val > 1.77272727273) {
$height = intval($img->getImageHeight() + ($img->getImageHeight() * ($val - 1.77272727273)));
$width = $img->getImageWidth();
} else {
$width = intval($img->getImageWidth() + ($img->getImageWidth() * (1.77272727273 - $val)));
$height = $img->getImageHeight();
}
$canvas = new Imagick();
$canvas->newImage($width, $height, 'white', 'jpg');
$geometry = $img->getImageGeometry();
$x = ($width - $geometry['width']) / 2;
$y = ($height - $geometry['height']) / 2;
$canvas->compositeImage($img, imagick::COMPOSITE_OVER, $x, $y);
$canvas->writeImage('/var/www/localhost/files/images/'.$fnamefoto);