imagecopyresampled - Копирование и изменение размера изображения с ресемплированием
Вернуться к: GD и функции для работы с изображениями Функции
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
)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 и функции для работы с изображениями Функции