PHP Imagick:如何调整大小而不进行缩放?

4

我正在使用PHP Imagick来处理图像。

我有两种用例:“resize”和“crop”。

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

然而,正如PHP文档所说,从版本3开始(我使用的是版本6+),Imagick的行为已经发生了变化,它会始终对图像进行缩放。

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

因此,在我的情况下,对于给定尺寸400x400,尺寸为200x150的图像应返回200x150的图像而不是400x300的图像。 对于给定尺寸100x100,尺寸为200x150的图像应返回100x75的图像(即应该进行缩小)。

我尝试了thumbnailImage(),resizeImage()和scaleImage(),但没有成功。 如果我将bestfit设置为false,则会进行裁剪,这不是我想要的resize。

是否有办法用Imagick实现这个呢?


“version 6+”不是一个有用的语句来指示您的版本;“version 6.9.1-3”才是……所以,请提供convert -version的输出。 - Kurt Pfeifle
我只想提一下,我的版本大于3.0,并且我受到了更改后的行为影响。以下是convert-version输出:版本:ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org 版权所有:Copyright (C) 1999-2012 ImageMagick Studio LLC 特性:OpenMP - NexWarner
为什么不直接使用http://php.net/manual/en/imagick.getimagewidth.php编写一些完全符合您要求的代码呢? - Danack
@Danack 那个函数只是返回图像的宽度。我不确定如何使用纯PHP编写此调整大小功能(甚至不确定是否可能),我想坚持使用Imagick(这是一种要求),并且不想使用GD。 - NexWarner
2个回答

11

尝试以这种方式进行:

$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
);

1
使用此命令:

convert input.img -resize 400x400\> output.img

请注意使用附加的\>修改符号来给出所需的尺寸的特定方式:它告诉转换过程只调整大于400x400像素的图像大小。小于该尺寸的图像将不受影响。

我不想通过命令行(或PHP的exec())来完成这个任务。我想知道在PHP Imagick类中是否有一种方法。调整大小后,我将把对象传递给其他方法进行进一步的操作,如添加水印。 - NexWarner
@KurtPfeifle Imagick != ImageMagick。ImageMagick的命令行版本执行了许多API无法访问的操作,而Imagick可以访问这些操作。 - Danack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接