基于纵横比php调整图像大小

时间:2011-05-18 05:24:59

标签: php image

我想要调整图像大小的新高度和宽度。有两个条件

  1. 宽度需要在180px(170-180)左右,但是< 180px(上传的图片始终> 180)
  2. 高度应为最大180px(上传的图像可能或可能不是> 180)

2 个答案:

答案 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
}