4:3图像裁剪算法

时间:2012-02-24 13:56:28

标签: perl imagemagick perlmagick

我正在使用ImageMagick for Perl

use Image::Magick;

我编写了功能代码来执行所有必要的任务,例如调整大小,缩略图,读取尺寸,裁剪,裁剪到中心。

我确实要求所有照片都是风景照片,所以我要丢弃任何高度大于或等于宽度的图像。

我正在努力解决的问题是在调整大小之前裁剪。照片需要4:3的宽高比。有些照片采用新的16:9格式,或者在发送到服务器之前可能已被裁剪,这会导致屏幕显示偏斜。在我调整大小之前,我想裁剪图像,使其最接近4:3。例如,800/600即可,但802/600会将中心裁剪为800/600。

我将调整所有照片的大小,不管裁剪的大小到800/600的最大存储图像,但这是仙女无关紧要。由于我可以提前读取高度和宽度尺寸,因此可能有一种算法可用于计算最接近的匹配。我真的只需要帮助获取要裁剪的新尺寸,而不是ImageMagick,除非ImageMagick中有一个可以为我做这个的功能。

然而,我找不到那个确实没有成功。

1 个答案:

答案 0 :(得分:7)

为我工作:

my $image_width  = 800; # play with this when testing
my $image_height = 600;

my $target_aspect  = 4 / 3; 
my $current_aspect = $image_width / $image_height;

given ($current_aspect <=> $target_aspect) {
  when (1) { $image_width = int($image_height * $target_aspect); }
  when (-1)  { $image_height = int($image_width / $target_aspect); }
}