Примечание. Эта функция основана на использовании библиотеки 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() или подобных ей.
Комментариев нет:
Отправить комментарий