imagecopyresampled

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

imagecopyresampled Копирует и изменяет размер части изображения с ресемплированием

Описание

imagecopyresampled(
    GdImage $dst_image,
    GdImage $src_image,
    int $dst_x,
    int $dst_y,
    int $src_x,
    int $src_y,
    int $dst_width,
    int $dst_height,
    int $src_width,
    int $src_height
): true

Функция 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(), ресемплирование работает без ошибок.

Смотрите также

  • imagecopyresized() - Копирует и изменяет размер части изображения
  • imagescale() - Масштабировать изображение по заданной ширине и высоте
  • imagecrop() - Обрезает изображение до заданного прямоугольника