我正在使用ImageMagick for Perl
use Image::Magick;
我编写了功能代码来执行所有必要的任务,例如调整大小,缩略图,读取尺寸,裁剪,裁剪到中心。
我确实要求所有照片都是风景照片,所以我要丢弃任何高度大于或等于宽度的图像。
我正在努力解决的问题是在调整大小之前裁剪。照片需要4:3的宽高比。有些照片采用新的16:9格式,或者在发送到服务器之前可能已被裁剪,这会导致屏幕显示偏斜。在我调整大小之前,我想裁剪图像,使其最接近4:3。例如,800/600即可,但802/600会将中心裁剪为800/600。
我将调整所有照片的大小,不管裁剪的大小到800/600的最大存储图像,但这是仙女无关紧要。由于我可以提前读取高度和宽度尺寸,因此可能有一种算法可用于计算最接近的匹配。我真的只需要帮助获取要裁剪的新尺寸,而不是ImageMagick,除非ImageMagick中有一个可以为我做这个的功能。
然而,我找不到那个确实没有成功。
答案 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); }
}