用于将图像调整为最大高度和最大宽度范围的数学

时间:2010-09-09 11:34:22

标签: image-processing resize scaling

给出一张图片:

maxWidth = 400;
maxHeight = 200;
width = photo.Width;
height = photo.Height;

如果任一尺寸超过最大属性,我将如何缩放图像?

以下是一些测试用例:

300x300  :   Too tall, but width ok.
500x200  :   Too wide, but height ok.
650x300  :   Too tall and too wide
300x190  :   Fine, don't resize

我无法想象数学,对不起,如果它太简单了!给我带来最多麻烦的案例是两个尺寸超过允许的最大尺寸。

3 个答案:

答案 0 :(得分:11)

分别计算所需的垂直和水平缩放,然后选择两者中较小的一个并将结果钳位到最大值1.代码:

scale = min(1, min(maxWidth/photo.Width, maxHeight/photo.Height))

确保除法运算使用浮点运算。如何做到这一点因语言而异。在C / Java / C#及其同类中,将其中一个操作数转换为float。

答案 1 :(得分:2)

计算两个比率(浮点结果):

  • 输入宽度除以最大允许宽度
  • 输入高度除以最大允许高度

然后,

  • 如果两个比率
  • 如果比率之一> 1.0,按该因子缩小。
  • 如果两个比率> 1.0,按两个因素中的较大者缩小。

答案 2 :(得分:0)

我的数学很糟糕,但是,假设你想要一个比例尺,我会这样解决:

if maxWidth < photo.Width
    width = 'too big'
if maxHeight < photo.Height
    height = 'too big'

if height == 'to big' & width == 'too big' 
    x = photo.Width / maxWidth;
    y = photo.Height / maxHeight;
    if x > y
        scale_by_width(photo)
    else
        scale_by_height(photo)

elseif height == 'too big'
    scale_by_height(photo)

elseif width == 'too big'
    scale_by_width(photo)

else
    do_nothing