按比例调整图像大小的算法,使其尽可能接近给定尺寸

问题描述 投票:0回答:2

示例

myFunction(400, 300, 50, 100)
=> 必须返回宽度和高度以按比例调整我的 400x300(第一个和第二个参数)图像的大小。调整大小后的图像 必须至少为 50x100 (第 3 个和第 4 个参数)。 52x.. 或 ..x102 完全可以,但“超大尺寸”必须尽可能小,以保持纵横比。 详情

我必须编写一个函数(我将使用Javascript/Jquery,但我们不用担心语言:我对逻辑感兴趣),如下所示:

[new_image_width, new_image_height] function(image_width, image_height, reference_width, reference_height)


此功能需要:

    image_width
  • :图像的宽度
  • image_height
  • :图像的高度
  • reference_width
  • :所需的图像最小宽度(见下文)
  • reference_height
  • :所需的图像最小高度(见下文)
    
    
    
  • 返回:

    new_image_width
  • :按比例调整图像宽度(见下文)
  • new_image_height
  • :按比例调整图像高度(见下文)
    
    
    
  • 该函数必须计算
最接近各自“参考”参数的宽度和高度,而不是低于其值,并保留纵横比。

我的函数实际上不能调整图像的大小,而只能返回要调整大小的新整数。

注意:我对代码很满意,但数学水平只有一年级。请大家手下留情:-(

javascript jquery algorithm image-processing image-resizing
2个回答
2
投票

ratio = min(image_width / reference_width, image_height / reference_height)

然后返回
image_width / ratio
image_height / ratio

如果您确实关心舍入误差

找到 GCD

image_width

 的最大公约数 
image_height
。您可以制作的具有完全相同长宽比的最小图像具有尺寸
image_width' = image_width / GCD
image_height' = image_height / GCD

每一个具有完全相同长宽比的较大图像都是这些图像的整数倍。那么,让
ratio_width = ceil(reference_width / image_width')
ratio_height = ceil(reference_height / image_height')

ratio = max(ratio_width, ratio_height)

那么你的结果是
ratio * image_width'
ratio * image_height'

好吧,试试这个:

0
投票
function myFunction(image_width, image_height, reference_width, reference_height) { var proportion = image_width/image_height; if(reference_height*proportion < reference_width){ return [reference_width, reference_width/proportion]; } else { return [reference_height*proportion,reference_height]; } }


© www.soinside.com 2019 - 2024. All rights reserved.