文字

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.

范例

Example #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 ();
}

?>

用户评论:

[#1] agamemnus at flyingsoft dot pw [2014-03-15 15:34:48]

Warning: this will blur your edges in possibly unexpected ways. For better control, use resizeImage, instead.

[#2] 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();
?>

[#3] 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.

[#4] 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
?>

[#5] 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.

[#6] 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);
}

上一篇: 下一篇: