保留图像中的纵横比::Magick 的缩略图功能

Posted

技术标签:

【中文标题】保留图像中的纵横比::Magick 的缩略图功能【英文标题】:Preserving Aspect Ratio in Image::Magick's Thumbnail function 【发布时间】:2020-03-29 00:46:08 【问题描述】:

我正在尝试使用 Perl Image::Magick 库来使用 ImageMagick 的缩略图功能。我读到的所有内容都表明,ImageMagick 在给定宽度和高度时会保留纵横比,几乎就像 CSS 用语中的 max-width 和 max-height 一样。然而,在实践中,它似乎将图像干扰到我给出的尺寸中,而不考虑纵横比。我错过了我需要打开的标志吗?我的印象是保留纵横比是默认行为。

    my $image = Image::Magick->new;
    $image->BlobToImage($imageData);
    $image->SetAttribute(quality => 80);
    $image->SetAttribute(compression => 'JPEG');
    $image->Thumbnail(width => $thumbnailWidth, height => $thumbnailHeight);

【问题讨论】:

【参考方案1】:

geometry参数下有综合大小操作的选项

scale% 高度和宽度都按指定百分比缩放。 ... 宽度给定宽度,高度自动选择以保持纵横比。 ... widthxheight 给定高度和宽度的最大值,保留纵横比。 widthxheight^ 给定宽度和高度的最小值,保留纵横比。 宽x高!强调给出宽度和高度,忽略原始纵横比。 ...

这是来自ImageMagick 的command-line use 页面的Image Geometry 部分。 Perl module's documentation 没有提供这种级别的 API 详细信息这一事实通常意味着它的绑定实现了其中的大部分(全部?),并且被通用文档所涵盖。

命令行示例,将图像缩小到20%

perl -MImage::Magick -we'$f = shift // die "Pass image filename\n"; 
    $img = Image::Magick->new; 
    $img->Read($f);
    $img->Thumbnail(geometry => "20%"); 
    $img->Write(filename => "scaled_$f")'

根据问题中的示例判断,您似乎需要参数值

widthxheight 给定高度和宽度的最大值,保留纵横比。

更通用的ResizeScale 方法也有geometry 参数。

【讨论】:

非常感谢!我从缩略图调用本身中删除了尺寸,并将其切换到另一个 SetAttribute 并设置为 widthxheight 。成功了! @TimothyR.Butler 太好了。我发现 Perl 的文档对此有点不清楚(在 SetAttribute 下看不到相关选项/参数) 是的,Perl 模块的文档肯定有一些不足之处!再次感谢。

以上是关于保留图像中的纵横比::Magick 的缩略图功能的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD缩略图生成图像像素失真

如何在此应用程序中保持图像视图的纵横比? 【Android、ImageView、长宽比、ScrollView】

为纵向和横向模式调整 UIImage 的大小

散景图像绘图与紧轴和匹配的纵横比

调整图像大小并裁剪为新的纵横比

Yii2 - Imagine - 创建缩略图并保持透明背景