用于重新采样数组的Javascript库?

时间:2012-06-29 18:39:49

标签: javascript canvas interpolation resampling

我正在尝试在HTML画布上显示某些数据,而我遇到的问题类似于this one。也就是说,我的数据大小与画布的大小不完全匹配。

在一个例子中,我想在100px宽的画布上绘制1024点信号。 (例如,音频波形。)

在另一个例子中,我想在画布上显示1024 x 5000点矩阵,其宽度为100 px,宽度为500 px。 (例如,音频频谱图。)

在这两种情况下,我都需要对数据进行重新采样,使其适合画布。有没有人知道Javascript中可以执行此操作的库/工具包/函数?

**编辑**

我知道我可以在这里使用很多技术。一种可能性是简单地丢弃或复制数据点。这样做会有所收获,但已知丢弃/复制产生的结果往往看起来“锯齿状”或“块状”(见herehere)。我更喜欢使用稍微复杂的算法来输出更平滑的图像,例如Lanczosbilinearbicubic重新采样。其中任何一个都能满足我的需求。

我的问题不是关于使用哪种算法,而是关于它们是否已在开源JavaScript库中实现。令人惊讶的是,我在JS中找不到多少东西。编码我自己的重新采样功能显然是一个选项,但我想首先与SO社区核实,以确保我没有重新发明轮子。

This回答给出了一个非常接近我想要的代码清单,除了它直接在canvas对象而不是数据数组上运行,它强制输入和输出的宽高比为如果没有别的东西可以使用,我绝对可以解决这个问题,但是我希望找到一个更加通用和灵活的解决方案,与Matlab的resample一致。)

1 个答案:

答案 0 :(得分:1)

使用画布比例

ctx.scale(xscale,yscale);

您可以通过计算画布与数据之间的比率来确定缩放比例

ctx.scale(canvas_x/data_x,canvas_y/data_y)