PHP Conference Japan 2024

Imagick::scaleImage

(PECL imagick 2, PECL imagick 3)

Imagick::scaleImage缩放图像大小

描述

public Imagick::scaleImage(
    int $columns,
    int $rows,
    bool $bestfit = false,
    bool $legacy = false
): bool

将图像大小缩放为给定的尺寸。如果将 0 作为任一参数传递,则将计算另一个参数。

注意: 参数 bestfit 的行为在 Imagick 3.0.0 中发生了更改。在此版本之前,对于给定的尺寸 400x400,尺寸为 200x150 的图像将保持不变。在 Imagick 3.0.0 及更高版本中,图像将放大到 400x300,因为这是给定尺寸的“最佳拟合”。如果使用 bestfit 参数,则必须给出宽度和高度。

参数

列数

行数

最佳拟合

返回值

成功时返回 true

错误/异常

发生错误时抛出 ImagickException。

变更日志

版本 描述
PECL imagick 2.1.0 添加了可选的 fit 参数。此方法现在支持比例缩放。将零作为任一参数传递以进行比例缩放。

示例

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

?>

添加注释

用户贡献的注释 5 条注释

benford at bluhelix dot com
15 年前
如果有人发现“如果将 0 作为任一参数传递,则将计算另一个参数”有点令人困惑,它的意思大约是这样的

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(300, 0);
?>

这会缩放图像,使其宽度为 300 像素,并自动计算高度以保持图像的纵横比。

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(0, 300);
?>

类似地,此示例将图像缩放使其高度为 300 像素,并且该方法会自动重新计算图像的高度以保持纵横比。
vincent dot hoen at gmail dot com
17 年前
这是一个轻松调整动画 gif 大小的简单方法

$picture = new Imagick('animated_gif.gif');

foreach($picture as $frame){
$frame->scaleImage($width, $height);
}
octave at web dot de
15 年前
使用“fit = true”选项时,图像只会缩小,而不会放大

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

$im->scaleImage(2000, 1500, true); // => 1600x1200

$im->scaleImage(1000, 500, true); // => 666x500
?>
agamemnus at flyingsoft dot pw
10 年前
警告:这可能会以意想不到的方式模糊您的边缘。为了更好地控制,请改用 resizeImage。
clickconvert at gmail dot com
12 年前
需要调整纵向和横向图像的大小(并转换为 72ppi)?无论高度或宽度如何,这些图像都适合 800x600 的区域,而不会失真。

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