Here is a function to calculate the new dimensions of a thumbnail, to fit within the given dimensions on both sides.
<?php
/**
* Calculate new image dimensions to new constraints
*
* @param Original X size in pixels
* @param Original Y size in pixels
* @return New X maximum size in pixels
* @return New Y maximum size in pixels
*/
function scaleImage($x,$y,$cx,$cy) {
//Set the default NEW values to be the old, in case it doesn't even need scaling
list($nx,$ny)=array($x,$y);
//If image is generally smaller, don't even bother
if ($x>=$cx || $y>=$cx) {
//Work out ratios
if ($x>0) $rx=$cx/$x;
if ($y>0) $ry=$cy/$y;
//Use the lowest ratio, to ensure we don't go over the wanted image size
if ($rx>$ry) {
$r=$ry;
} else {
$r=$rx;
}
//Calculate the new size based on the chosen ratio
$nx=intval($x*$r);
$ny=intval($y*$r);
}
//Return the results
return array($nx,$ny);
}
?>
Use it like this:
<?php
//Read original image and create Imagick object
$thumb=new Imagick($originalImageFilename);
//Work out new dimensions
list($newX,$newY)=scaleImage(
$thumb->getImageWidth(),
$thumb->getImageHeight(),
$newMaximumWidth,
$newMaximumHeight);
//Scale the image
$thumb->thumbnailImage($newX,$newY);
//Write the new image to a file
$thumb->writeImage($thumbnailFilename);
?>
Imagick::thumbnailImage
(PECL imagick 2.0.0)
Imagick::thumbnailImage — Modifie la taille d'une image
Description
Cette fonction n'est pas documentée et seule la liste des arguments est disponible.
Modifie la taille d'une image dans les dimensions données et supprime tous les profiles associés. Le but est de produire une miniature à faible coût pour l'afficher sur le web. Si TRUE est fourni comme troisième paramètre, alors les paramètres columns et rows seront utilisés comme maximum de chacun des côtés. Chaque côté sera abaissé tant que la taille désirée ne sera pas atteinte.
Liste de paramètres
- columns
-
Largeur de l'image
- rows
-
Hauteur de l'image
- fit
-
Si l'on doit forcer les valeurs maximales
Valeurs de retour
Returns TRUE on success.
Erreurs / Exceptions
Lance une exception ImagickException si une erreur survient.
Imagick::thumbnailImage
02-Jul-2008 11:15
09-Jun-2008 04:48
If you want to resize your picture to fit smallest parameter:
$fitbyWidth = (($maxWidth/$w)<($maxHeight/$h)) ?true:false;
if($fitbyWidth){
$im->thumbnailImage($maxWidth, 0, false);
}else{
$im->thumbnailImage(0, $maxHeight, false);
}
17-Oct-2007 05:11
With $fit == true, the image is resized proportionally so that its _smallest_ dimension matches the width or height specified, NOT both.
For example, if you say thumbnailImage(400, 400, true), on an image of 1600x800, it will be resized to 800x400, NOT 400x200 as you might expect.
The solution is to compare the original image's dimensions to the specified dimensions, and substitute zero for the smaller dimension, and set $fit = false.
i.e.: thumbnailImage(400, 0, false) would resize that 1600x800 image to 400x200.
10-Sep-2007 11:18
As noted here
http://php.net/manual/en/ref.imagick.php
With either of the params as 0, the aspect ratio is maintained.
