我想要调整图像大小的新高度和宽度。有两个条件
答案 0 :(得分:0)
如果您正在为Linux编写程序,我建议您使用ImageMagick。它的内存效率更高,并且可能比任何基于PHP的方法都更快。几乎所有服务器都安装了它。以下代码可以解决问题。
function resizeTo($source, $dest, $w=180, $h=180) {
system("convert $source -resize {$w}x{$h} $dest");
}
它会介意宽高比。
修改强>
很抱歉这个混乱。我认为以下应该做你想要的。它没有经过测试,可能需要一点调试,如果遇到麻烦我可以尝试重新发布。
//accepts and returns point object (having ->x and ->y)
function resizeTo($current, $max) {
if($current->x <= $max->x && $current->y <= $max->y) //you will not need this but
return $current; // still its good to have
if( ($current->y / $max->y) > ($current->x / $max->x) ) { //y axis needs more trimming
$r=$current->y / $max->y;
$current->y = $max->y;
$current->x = $current->x / $r;
} else {
$r=$current->x / $max->x;
$current->x = $max->x;
$current->y = $current->y / $r;
}
return $current;
}
答案 1 :(得分:0)
您只需要几个步骤:
1. scale = imageWidth / 180;
2. scale = (imageHeight/scale>180) ? imageHeight/180 : scale;
第一个将设置使宽度为180所需的比例因子(根据您的注释,它总是大于180)
第二个将使用该比例检查高度是否大于180。如果是,那么比例将是高度/ 180。如果不是,那么你已经有了最大高度。
然后你还需要步骤来获得实际的宽度和高度:
width = imageWidth/scale;
height = imageHeight/scale;
考虑到你想使imageWidth在170和180之间,我猜也有可能裁剪图像。如果是这种情况,您需要额外检查
if (width<170) {
width = 170;
height = imageHeigh / (imageWidth/170);
//resize image to width and height
//crop image to height = 180
}