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();
?>
Imagick::scaleImage
(PECL imagick 2.0.0)
Imagick::scaleImage — Met à l'échelle la taille de l'image
Description
$cols
, int $rows
[, bool $bestfit = false
] )Met à l'échelle la taille de l'image, aux dimensions voulues. Les autres paramètres seront calculés si 0 est pas dans l'un d'entre eux.
Note: Le comportement du paramètre
bestfita changé avec Imagick 3.0.0. Avant cette version, fournir les dimensions 400x400 à une image de dimensions 200x150 faisait que la partie gauche était inchangée. Avec Imagick 3.0.0 et suivants, l'image est réduite à la taille 400x300, sachant que c'est le meilleur résultat pour ces dimensions. Si le paramètrebestfitest utilisé, la largeur et la hauteur doivent être fournies.
Liste de paramètres
-
cols -
-
rows -
-
bestfit -
Valeurs de retour
Returns TRUE on success.
Erreurs / Exceptions
Lance une exception ImagickException si une erreur survient.
Historique
| Version | Description |
|---|---|
| 2.1.0 | Ajout d'un paramètre optionnel de fit. Cette méthode supporte désormais la mise à l'échelle proportionnelle. Passez zéro dans l'un des paramètres pour activer cette option. |
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.
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.
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
?>
Here is an easy way to resize an animated gif :
$picture = new Imagick('animated_gif.gif');
foreach($picture as $frame){
$frame->scaleImage($width, $height);
}
