特定比例裁剪图像的算法



我需要一个算法,给定图像的宽度,高度和目标比率将计算从图像的侧面剃去的像素数量以达到该比率,在图像的面积中具有最小的变化。

如何实现这样的算法?

编辑

很抱歉我最初的问题不一致;

  1. 将比率转换为简化形式,使gcd(ratio_width, ratio_height) = 1。
  2. 计算floor(width/ratio_width)和floor(height/ratio_height)。您的因子是这两个因子中的最小值。
  3. 将ratio_width和ratio_height相乘得到新的图像尺寸。

要使面积变化最小化,您需要找到符合所需宽高比的最大矩形,该矩形将适合原始图像边界。

因此,如果原始图像太宽,则使最终图像的高度=原始高度,并去除多余的宽度。

如果原始图像太高,则使最终图像的宽度=原始宽度,并去除多余的高度。

注意:这假定不允许在原始尺寸之外增加宽度或高度。如果不是这种情况,算法将是:

约束1:x_final * y_final = x_initial * y_initial 约束2:x_final/y_final = r

解决方案是:

x_final = sqrt(r*x_initial*y_initial)

y_final =√x_initial * y_initial/r)

最新更新