PHP 8.4.2 Released!

Imagick::scaleImage

(PECL imagick 2, PECL imagick 3)

Imagick::scaleImageМасштабирует размер изображения

Описание

public Imagick::scaleImage(
    int $columns,
    int $rows,
    bool $bestfit = false,
    bool $legacy = false
): bool

Масштабирует изображение до заданных размеров. Второй параметр будет вычислен, если в качестве любого из параметров будет передан 0.

Замечание: Поведение параметра bestfit изменили в Imagick 3.0.0. До этой версии при размерах 400 x 300 точек изображение размером 200 x 150 точек оставалось нетронутым. В Imagick 3.0.0 и более поздних версиях изображение будет масштабироваться до размера 400 x 300 точек, поскольку такой размер «больше остальных соответствует» заданным размерам. Потребуется указать как ширину, так и высоту, если задали параметр bestfit.

Список параметров

columns

rows

bestfit

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

Функция в случае успешной работы возвращает true.

Ошибки

Функция выбрасывает исключение ImagickException, если возникла ошибка.

Список изменений

Версия Описание
PECL imagick 2.1.0 Добавлен необязательный параметр fit. Метод теперь поддерживает пропорциональное масштабирование. Передайте ноль в качестве любого параметра для пропорционального масштабирования.

Примеры

Пример #1 Пример использования Imagick::scaleImage()

<?php
function scaleImage($imagePath) {
$imagick = new \Imagick(realpath($imagePath));
$imagick->scaleImage(150, 150, true);
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

Добавить

Примечания пользователей 5 notes

up
28
benford at bluhelix dot com
15 years ago
If anyone finds "The other parameter will be calculated if 0 is passed as either param. " to be a bit confusing, it means approximately this:

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(300, 0);
?>

This scales the image such that it is now 300 pixels wide, and automatically calculates the height to keep the image at the same aspect ratio.

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(0, 300);
?>

Similarly, this example scales the image to make it 300 pixels tall, and the method automatically recalculates the image's height to maintain the aspect ratio.
up
9
vincent dot hoen at gmail dot com
17 years ago
Here is an easy way to resize an animated gif :

$picture = new Imagick('animated_gif.gif');

foreach($picture as $frame){
$frame->scaleImage($width, $height);
}
up
7
octave at web dot de
15 years ago
When using the "fit = true" option, the image will only scale down, but never scale up:

<?php
$im
= new Imagick('1600x1200.jpg');

$im->scaleImage(2000, 1500, true); // => 1600x1200

$im->scaleImage(1000, 500, true); // => 666x500
?>
up
3
agamemnus at flyingsoft dot pw
10 years ago
Warning: this will blur your edges in possibly unexpected ways. For better control, use resizeImage, instead.
up
5
clickconvert at gmail dot com
12 years ago
Need to resize portrait and landscape images (and convert to 72ppi)? These will fit an area of 800x600 without distorting, no matter how tall or wide.

<?php
$img
= new Imagick($img_loc.$file);
$img->setImageResolution(72,72);
$img->resampleImage(72,72,imagick::FILTER_UNDEFINED,1);
$img->scaleImage(800,0);
$d = $img->getImageGeometry();
$h = $d['height'];
if(
$h > 600) {
$img->scaleImage(0,600);
$img->writeImage($resized_loc.$file);
} else {
$img->writeImage($resized_loc.$file);
}
$img->destroy();
?>
To Top