PHP 8.1.0 RC 2 available for testing

Imagick::scaleImage

(PECL imagick 2, PECL imagick 3)

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

Описание

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

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

Замечание: Поведение параметра bestfit было изменено в Imagick 3.0.0. До этой версии при изменении изображения размером 200x150 до 400x300 никаких операций не происходило. В Imagick 3.0.0 и далее изображение будет масштабировано до размеров 400x300, так как это наилучшим образом соответствует ("best fit") данным размерам. Если используется параметр bestfit, то ширина и высота также должны быть определены.

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

cols

rows

bestfit

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

В случае успешной работы возвращает true.

Ошибки

Вызывает ImagickException в случае возникновения ошибки.

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

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

Примеры

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

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

?>

add a note add a note

User Contributed Notes 6 notes

up
27
benford at bluhelix dot com
12 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
8
vincent dot hoen at gmail dot com
14 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
5
agamemnus at flyingsoft dot pw
7 years ago
Warning: this will blur your edges in possibly unexpected ways. For better control, use resizeImage, instead.
up
7
octave at web dot de
12 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
4
clickconvert at gmail dot com
8 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();
?>
up
-4
peter at icb dot at
11 years ago
If using the fit-parameter this function sometimes seems not to work when one of the two sizes (width or height) is the same size as the image has. For example:

<?php
$image
= new Imagick('800x480.jpg');
$image->scaleImage(640, 480, true);

// $image is still 800x480
?>

You have to calculate the new sizes yourself and use false for $fit in this case.
To Top