(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
imagecopyresampled — Копирует и изменяет размер части изображения с ресемплированием
$dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,$dst_width,$dst_height,$src_width,$src_heightФункция imagecopyresampled() копирует прямоугольную область одного изображения на другое с плавной интерполяцией значений пикселей, за счёт которой изображение сохраняет чёткость даже при уменьшении размера.
Функция imagecopyresampled() копирует на изображении src_image
прямоугольную область шириной src_width и высотой src_height
и помещает скопированную часть в прямоугольную область
шириной dst_width и высотой dst_height
на целевом изображении dst_image.
Координаты левого верхнего угла области на исходном изображении
определяют параметры src_x и src_y,
а на целевом — dst_x и dst_y.
Функция растянет или сожмёт фрагмент изображения,
если координаты или размер исходного и целевого изображений не совпадают.
Координаты отсчитываются от левого верхнего угла изображения.
При совпадении аргументов dst_image и src_image
функция копирует области внутри одного изображения,
но когда области перекрываются — выдаёт непредсказуемый результат.
dst_imageРесурс целевого изображения.
src_imageРесурс исходного изображения.
dst_xКоордината точки по оси x на целевом изображении.
dst_yКоордината точки по оси y на целевом изображении.
src_xКоордината точки по оси x на исходном изображении.
src_yКоордината точки по оси y на исходном изображении.
dst_widthШирина области на целевом изображении.
dst_heightВысота области на целевом изображении.
src_widthШирина области на исходном изображении.
src_heightВысота области на исходном изображении.
Функция возвращает логическое значение true.
| Версия | Описание |
|---|---|
| 8.0.0 |
Параметры dst_image и src_image теперь принимают
объект GdImage;
раньше принимался тип resource.
|
Пример #1 Простой пример
В примере изображение сжимается до половины исходного размера.
<?php
// Файл
$filename = 'test.jpg';
$percent = 0.5;
// Тип содержимого
header('Content-Type: image/jpeg');
// Получение новых размеров
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Ресемплирование
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Вывод
imagejpeg($image_p, null, 100);Вывод приведённого примера будет похож на:
Пример #2 Пример ресемплирования изображения с сохранением пропорций
В примере изображение сжимается до 200 пикселей по большей стороне — ширине или высоте.
<?php
// Файл
$filename = 'test.jpg';
// Установка максимума ширины и высоты
$width = 200;
$height = 200;
// Тип содержимого
header('Content-Type: image/jpeg');
// Получение новых размеров
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig / $height_orig;
if ($width / $height > $ratio_orig) {
$width = $height * $ratio_orig;
} else {
$height = $width / $ratio_orig;
}
// Ресемплирование
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Вывод
imagejpeg($image_p, null, 100);Вывод приведённого примера будет похож на:
Замечание:
Из-за ограничения количества цветов палитровых изображений значением 255 + 1 цвет возникает проблема. Для ресемплирования или фильтрации изображений часто требуется больше 255 цветов, поэтому функция вычисляет новый цвет пикселя методом аппроксимации. При обработке палитровых изображений функция пытается добавить в палитру новый цвет, а если создать цвет невозможно, вычисляет теоретический ближайший. Иногда расчёт даёт странный результат: цвет не кажется близким, а изображение выглядит пустым. С полноцветными целевыми изображениями, которые, например, создаёт функция imagecreatetruecolor(), ресемплирование работает без ошибок.