首页 > 解决方案 > 保留图像中的纵横比::Magick 的缩略图功能

问题描述

我正在尝试使用 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);

标签: perlimagemagick

解决方案


geometry参数下有综合尺寸操作选项

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

这是来自命令行使用页面的图像几何部分。Perl 模块的文档没有给出这个级别的 API 细节的事实通常意味着它的绑定实现了大多数(全部?)这些,并且被通用文档所涵盖。ImageMagick

一个命令行示例,将图像缩小到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参数。


推荐阅读