Imagick
在线手册:中文  英文

Imagick::scaleImage

(PECL imagick 2.0.0)

Imagick::scaleImageScales the size of an image

说明

bool Imagick::scaleImage ( int $cols , int $rows [, bool $bestfit = false ] )

Scales the size of an image to the given dimensions. The other parameter will be calculated if 0 is passed as either param.

Note: 参数 bestfit 的特性在 Imagick 3.0.0 中已改变。在此版本以前,当目标尺寸设为 400x400 时,原尺寸为 200x150 的图像将不会被改变。自 Imagick 3.0.0 起,源图像将会被放大到 400x300 因为这将更好的适合目标尺寸。当使用参数 bestfit 时,必须同时给出宽度和高度。

参数

cols

rows

bestfit

返回值

成功时返回 TRUE

错误/异常

错误时抛出 ImagickException。

更新日志

版本 说明
2.1.0 Added optional fit parameter. This method now supports proportional scaling. Pass zero as either parameter for proportional scaling.


Imagick
在线手册:中文  英文

用户评论:

clickconvert at gmail dot com (2012-11-08 21:50:20)

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();
?>

peter at icb dot at (2009-09-22 05:25:10)

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(640480true);

// $image is still 800x480
?>

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

octave at web dot de (2009-07-23 02:57:39)

When using the "fit = true" option, the image will only scale down, but never scale up:

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

$im->scaleImage(20001500true); // => 1600x1200

$im->scaleImage(1000500true); // => 666x500
?>

benford at bluhelix dot com (2009-06-16 08:38:46)

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(3000);
?>

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(0300);
?>

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.

vincent dot hoen at gmail dot com (2007-08-02 06:37:20)

Here is an easy way to resize an animated gif :
$picture = new Imagick('animated_gif.gif');
foreach($picture as $frame){
$frame->scaleImage($width, $height);
}

易百教程