Примечание. Эта функция основана на использовании библиотеки GD2. Возможно, не самый быстрый вариант, но библиотека GD2 изначально подключена на большинстве хостингов.
//$image - исходное изображение, созданное функцией imagecreatefrompng или подобными
//$width - ширина уменьшенного изображения
//$height - высота уменьшенного изображения
function GetResampledImage($image, $width, $height)
{
//Сохраняем длину и ширину исходного изображения
$widthOriginal = imagesx($image);
$heightOriginal = imagesy($image);
//Объявляем переменные для размеров пропорционально сжатого изображения (без обрезки)
//Изначально приравниваем их к размерам уменьшенного изображения
$widthSampled = $width ;
$heightSampled = $height;
//Вычисляем коэффициенты соотношения сторон уменьшенного и исходного изображений
$aspect = $height / (float)$width;
$aspectOriginal = $heightOriginal / (float)$widthOriginal;
//Вычисляем соотношение коэффициентов
$aspectAspect = $aspect / $aspectOriginal;
//Объявляем переменные для смещения изображения (нужно для обрезки)
$dX = 0;
$dY = 0;
//Вычисляем размеры пропорционально сжатого изображения (без обрезки) и смещение изображения
if($aspectAspect > 1)
{
$widthSampled *= $aspectAspect;
$dX = ($widthSampled - $width) / 2;
}
else
{
$heightSampled /= $aspectAspect;
$dY = ($heightSampled - $height) / 2;
}
//Создаём прозрачное изображение для вывода уменьшенного изображения
$imageResult = imagecreatetruecolor($width, $height);
imagesavealpha($imageResult, true);
imagefill($imageResult, 0, 0, imagecolorallocatealpha($imageResult, 0, 0, 0, 127));
//Создаём прозрачное изображение для хранения пропорционально сжатого изображения
$imageSampled = imagecreatetruecolor($widthSampled, $heightSampled);
imagesavealpha($imageSampled, true);
imagefill($imageSampled, 0, 0, imagecolorallocatealpha($imageSampled, 0, 0, 0, 127));
//Пропорционально сжимаем исходное изображение
imagecopyresampled($imageSampled, $image, 0, 0, 0, 0, $widthSampled, $heightSampled, $widthOriginal, $heightOriginal);
//Обрезаем пропорционально сжатое изображение
imagecopy($imageResult, $imageSampled, 0, 0, $dX, $dY, $widthSampled, $heightSampled);
return $imageResult;
}
Полученное изображение можно сохранить с помощью функции imagepng() или подобных ей.
Комментариев нет:
Отправить комментарий