【问题标题】:PHP Imagick: How to resize without scaling up?PHP Imagick:如何在不放大的情况下调整大小?
【发布时间】:2015-08-11 20:10:08
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • "version 6+" 不是一个有用的说明来表明您的版本; "version 6.9.1-3" 将是...所以请给出convert -version的输出。
  • 我只想提一下,我的版本大于 3.0,并且我受到更改的行为的影响。以下是 convert -version 输出: 版本:ImageMagick 6.7.7-10 2014-03-06 Q16 imagemagick.org 版权所有:版权所有 (C) 1999-2012 ImageMagick Studio LLC 功能:OpenMP
  • 为什么不用php.net/manual/en/imagick.getimagewidth.php编写一些完全符合您要求的代码
  • @Danack 该函数只返回图像宽度。我不知道如何用普通的 PHP 编写这个调整大小的功能(甚至不确定它是否可能),我想坚持使用 Imagick(一种要求)并且不想使用 GD。

标签: php imagemagick imagick


【解决方案1】:

尝试这样做:

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

【讨论】:

    【解决方案2】:

    使用这个命令:

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

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

    【讨论】:

    • 我不希望这通过命令行(或通过 PHP 的 exec())来完成。我想知道 PHP Imagick 类中是否有方法。调整大小后,我会将对象传递给其他方法以进行进一步的操作,例如加水印。
    • @KurtPfeifle Imagick != ImageMagick。 ImageMagick 的命令行版本执行了大量未通过 Imagick 有权访问的 API 公开的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-05-23
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2018-05-11
    相关资源
    最近更新 更多