PHP Imagick:如何在不放大的情况下调整大小?

Nex*_*ner 4 php imagemagick imagick

我正在使用 PHP Imagick 来操作图像。

我有两个用例:“调整大小”和“裁剪”。

在“调整大小”中,如果原始图像的尺寸小于给定的宽度和高度,我不希望Imagick 将其放大,而是希望它简单地返回原始大小。

但是,正如 PHP 文档所说,Imagick 的行为已从版本 3(我使用的是版本 6+)更改为始终放大图像。

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

因此,就我而言,对于给定尺寸 400x400,尺寸为 200x150 的图像应返回 200x150 而非 400x300 的图像。对于给定的 100x100 尺寸,尺寸为 200x150 的图像应返回 100x75 的图像(即应按比例缩小)。

我尝试过thumbnailImage()、resizeImage() 和scaleImage() 没有任何运气。如果我将 bestfit 设置为 false 它会进行裁剪,这不是我想要的调整大小。

有什么办法可以用 Imagick 完成这项工作吗?

小智 7

尝试这样做:

$max_width  = 1200;
$max_height = 800;
$im = new Imagick($path_to_image);
$im->resizeImage(
    min($im->getImageWidth(),  $max_width),
    min($im->getImageHeight(), $max_height),
    imagick::FILTER_CATROM,
    1,
    true
);
Run Code Online (Sandbox Code Playgroud)


Kur*_*fle 1

使用这个命令:

convert input.img -resize 400x400\> output.img
Run Code Online (Sandbox Code Playgroud)

请注意使用附加修饰符给出所需尺寸的具体方式\>:它告诉转换过程仅调整大于400x400 像素的图像大小。较小的图像保持不变。