如何迭代缩放值,但仍然达到原始值的特定比例?

时间:2019-04-04 16:40:18

标签: javascript algorithm

这几乎是一个简单的数学问题,但我对数学不好。假设我在做类似的事情:

let originalWidth = img.width;
let originalHeight = img.height;
for (let percent = 100; percent >= 10; percent -= 5) {
  let percentScale = percent / 100;
  let ctx = img.getContext("2d");
  ctx.scale(percentScale, percentScale);
  img.width = originalWidth * percentScale;
  img.height = originalHeight * percentScale;
  ....

在此示例中,ctx.scale(percentScale, percentScale);会将其缩放为上一次缩放迭代所得到的缩放比例的百分比,而我想要的是原始缩放比例的百分比,但是我不想复制原始对象并缩放每次都从那里开始,因为迭代缩放可以节省计算量,而性能是这里的一个因素。

我该如何更改我的代码以获得正确的数学结果?

2 个答案:

答案 0 :(得分:1)

您可以取消最后一次应用的缩放因子:

compress = zlib.compressobj( 1, zlib.DEFLATED, -15, zlib.DEF_MEM_LEVEL, 0 ) 
deflated = compress.compress(string_to_compress)
encoded = base64.b64encode(deflated)
print(encoded)

答案 1 :(得分:0)

如果要在 n 个步骤中按比例缩放为 x 的因数,则每个步骤应按pow(x,1.0/n)进行缩放