Размеры блока исходя из соотношение сторон изображения
Вот код из моей личной сумки для изменения размера изображений. Сначала необходимые данные:
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;