Размеры блока исходя из соотношение сторон изображения

Вот код из моей личной сумки для изменения размера изображений. Сначала необходимые данные:

list($originalWidth, $originalHeight) = getimagesize($imageFile);
$ratio = $originalWidth / $originalHeight;

Затем этот алгоритм подгоняет изображение под заданный размер, сохраняя исходное соотношение сторон и не растягивая изображение больше, чем оригинал:

$targetWidth = $targetHeight = min($size, max($originalWidth, $originalHeight));

if ($ratio < 1) {
    $targetWidth = $targetHeight * $ratio;
} else {
    $targetHeight = $targetWidth / $ratio;
}

$srcWidth = $originalWidth;
$srcHeight = $originalHeight;
$srcX = $srcY = 0;

При этом изображение обрезается так, чтобы полностью заполнить целевой размер, не растягивая его:

$targetWidth = $targetHeight = min($originalWidth, $originalHeight, $size);
if ($ratio < 1) {
    $srcX = 0;
    $srcY = ($originalHeight / 2) - ($originalWidth / 2);
    $srcWidth = $srcHeight = $originalWidth;
} else {
    $srcY = 0;
    $srcX = ($originalWidth / 2) - ($originalHeight / 2);
    $srcWidth = $srcHeight = $originalHeight;
}

А это выполняет фактическое изменение размера:

$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
imagecopyresampled($targetImage, $originalImage, 0, 0, $srcX, $srcY, $targetWidth, $targetHeight, $srcWidth, $srcHeight);

В этом случае $size - это одно число для ширины и высоты (квадратный размер цели), вы можете модифицировать его для использования неквадратных целей.

list($originalWidth, $originalHeight) = getimagesize($imageFile);

$ratio = $originalWidth / $originalHeight;

Если вы хотите изменить ширину:
$targetWidth = $targetHeight * $ratio;

Если вы хотите изменить высоту:
$targetHeight = $targetWidth / $ratio;

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии