Статьи, материалы, руководства, учебники о web-разработке и web-дизайну.
Иногда требуется для представления больших изображений создать уменьшенные их копии, чтобы их высота и ширина не превышала определённый размер, при этом, чтобы их размеры оставались пропорциональными исходному изображению. Сделать это можно несколькими способами:
В этой статье мы воспользуемся самым простым способом – рассчитаем при помощи PHP пропорцию ширины и высоты изображения. Для этого мы будем использовать следующий алгоритм:
В итоге мы получим следующий php-код:
<?php /* * Рассчитываем пропорцию ширины и высоты изображения * от большего значения к меньшему значению */ // Исходное изображение echo '<img src="/image.jpg" width="793" height="595" alt="img" /><br />';
// 1. Получаем размеры исходного изображения list($imgWidth, $imgHeight) = getimagesize('image.jpg');
echo 'Ширина исходного изображения - ' . $imgWidth . '<br />'; echo 'Высота исходного изображения - ' . $imgHeight . '<br />';
// 2. Задаём минимальную ширину и высоту будущего изображения $maxWidth = '150';
$maxHeight = '150';
// 3. Рассчитываем коэффициент пропорции по отношению к уменьшенной копии
// На основе рассчитанного коэффициента - получаем новые размеры
if ($imgWidth > $imgHeight) { $ratio = $maxWidth / $imgWidth; } else { $ratio = $maxHeight / $imgHeight; }
// 4. Уменьшаем исходное изображение до указанных размеров $newWidth = $ratio * $imgWidth;
$newHeight = $ratio * $imgHeight;
echo 'Новая ширина изображения - ' . $newWidth . '<br />'; echo 'Новая высота изображения - ' . $newHeight . '<br />';
// 5. При помощи функции intval – получаем целочисленное значение размеров изображения $newWidth = intval($newWidth); $newHeight = intval($newHeight);
echo 'Целочисленная ширина - ' . $newWidth . '<br />'; echo 'Целочисленная высота - ' . $newHeight . '<br />';
// 6. Выводим изображение с полученными размерами echo '<img src="/image.jpg" width="' . $newWidth . '" height="' . $newHeight . '" alt="img" />';
?>
При выполнении этого кода, в браузере вы должны увидеть что-то подобное этому: