GD и функции для работы с изображениями Функции
PHP Manual

imagecopyresampled

(PHP 4 >= 4.0.6, PHP 5)

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

Описание

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

imagecopyresampled() копирует прямоугольную часть одного изображения на другое изображение, интерполируя значения пикселов таким образом, чтобы уменьшение размера изображения не уменьшало его четкости.

Другими словами, imagecopyresampled() берет прямоугольный участок из src_image с шириной src_w и высотой src_h на координатах src_x,src_y и помещает его в прямоугольный участок изображения dst_image шириной dst_w и высотой dst_h на координатах 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_w

Результирующая ширина.

dst_h

Результирующая высота.

src_w

Ширина исходного изображения.

src_h

Высота исходного изображения.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #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. Для расчета нового пиксела и его цвета применяется некоторое приближение. В случае палитровых изображений мы пытаемся создать новый цвет, а если это не удается, мы выбираем ближайший (теоретически) вычисленный цвет. Это не всегда визуально ближайший цвет. Такой подход может давать в результате пустые (или визуально пустые) изображения. Для устранения этой проблемы, пожалуйста, используйте truecolor-изображения в качестве результирующих, создаваемые функцией imagecreatetruecolor().

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

imagecopyresized() - Копирование и изменение размера части изображения


GD и функции для работы с изображениями Функции
PHP Manual