2

我正在为 Perl 使用 ImageMagick

use Image::Magick;

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

我确实要求所有照片都是横向的,所以我扔掉任何高度大于或等于宽度的图像。

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

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

但是,我一直没有成功找到一个。

4

1 回答 1

8

为我工作:

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); }
}
于 2012-02-24T14:09:19.770 回答