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

# imagecopyresampled

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

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

### Описание

function 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.5.0 | Тип возврата изменился на `true`; раньше возвращался тип bool.
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() - Обрезает изображение до заданного прямоугольника

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open