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 — Escala el tamaño de una imagen
Descripción
bool Imagick::scaleImage
( int
$cols
, int $rows
[, bool $bestfit = false
] )Escala el tamaño de una imagen a las dimensiones dadas. El otro parámetro será calculado si se pasa 0 como parámetro.
Nota: La conducta del parámetro
bestfitcambió en Imagick 3.0.0. Antes de esta versión dar la dimensión de 400x400 a una imagen de 200x150 debería no tener efecto. En Imagick 3.0.0 y superiores la imagen sería llevada al tamaño de 400x300 ya que este es el "mejor ajuste" para las dimensiones dadas. Si el parámetrobestfites utilizado, se debe indicar tanto el ancho como el alto.
Parámetros
-
cols -
-
rows -
-
bestfit -
Valores devueltos
Devuelve TRUE en caso de éxito.
Errores/Excepciones
Lanza ImagickException en caso de error.
Historial de cambios
| Versión | Descripción |
|---|---|
| 2.1.0 | Añadido el parámetro opcional de ajuste. Este método ahora soporta escalas proporcionales. Pase cero como parámetro para escalar proporcionalmente. |
clickconvert at gmail dot com ¶
6 months ago
benford at bluhelix dot com ¶
3 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.
peter at icb dot at ¶
3 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.
octave at web dot de ¶
3 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
?>
vincent dot hoen at gmail dot com ¶
5 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);
}
