imagecopyresampled
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
Описание
$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
) : boolimagecopyresampled() копирует прямоугольную часть одного изображения на другое изображение, интерполируя значения пикселов таким образом, чтобы уменьшение размера изображения не уменьшало его четкости.
Другими словами, 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() - Копирование и изменение размера части изображения
- imagescale() - Масштабировать изображение по заданной ширине и высоте
- imagecrop() - Обрезать изображение до заданного прямоугольника