如何使用 Imagick 将图像的大小减小到设定的宽度?

How to reduce size of Image using Imagick to a set width?

我有一个照片库,其中封面照片的图像设置宽度为 290 像素,高度可以是任意值。我想要 Pinterest 类型的效果。我正在尝试使用 PHP 和 Imagick 来执行此操作,但似乎无法弄清楚。有人可以帮忙吗?

这是我目前拥有的功能,但只能获取小图像。我在某处读到,将高度设置为更高的数字会使它自动但无济于事。

function thumbnailImage($imagePath,$real_target_pathThumb) {

                $imagick = new Imagick($imagePath);
                $imagick->thumbnailImage(290, 9999, true, true);

                $imagick->writeImage($real_target_pathThumb);

            };

由于thumbnailImage 函数不支持一维限制,最好的方法是使用宽高比并手动计算缩略图高度。这很简单:

$imagick = new Imagick($imagePath);
$imagick->thumbnailImage(290, (int)(290 * $imagick->getImageHeight() / $imagick->getImageWidth()));

你也可以从 imagick 的 thumbnailImage 方法中省略(或设置为 false)填充参数,像这样

$imagick->thumbnailImage(290, 9999, true);

通过指定填充参数,您告诉函数将图像调整到给定的尺寸,然后用颜色填充所有未使用的 space。

在没有填充参数的情况下,这种方法应该适用于大部分时间,但如果有人上传应该高于 9999 像素的图像,则会失败。