Вот код из моего личного мешка для захвата кода изменения размера изображения. Во-первых, данные, которые вам нужны:
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
представляет собой только одно число для ширины и высоты (квадратный размер цели). Я уверен, что вы можете изменить его, чтобы использовать не-квадратные цели. Это также должно дать вам вдохновение в отношении того, какие другие алгоритмы изменения размера вы можете использовать.