mmblur1 = {
function blurX(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var j = 0; j < m; ++j) {
for (var i = 0, sr = 0; i < n + r; ++i) {
if (i < n) {
sr += source.data[i + j * n];
}
if (i >= r) {
if (i >= w) {
sr -= source.data[i - w + j * n];
}
target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
}
}
}
}
function blurY(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var i = 0; i < n; ++i) {
for (var j = 0, sr = 0; j < m + r; ++j) {
if (j < m) {
sr += source.data[i + j * n];
}
if (j >= r) {
if (j >= w) {
sr -= source.data[i + (j - w) * n];
}
target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
}
}
}
}
return function blur(source, r, n) {
if (n === undefined) n = source.length;
const m = source.length / n;
var values0 = Float32Array.from(source),
values1 = new Float32Array(n * m);
blurX(
{ width: n, height: m, data: values0 },
{ width: n, height: m, data: values1 },
r
);
blurY(
{ width: n, height: m, data: values1 },
{ width: n, height: m, data: values0 },
r
);
blurX(
{ width: n, height: m, data: values0 },
{ width: n, height: m, data: values1 },
r
);
blurY(
{ width: n, height: m, data: values1 },
{ width: n, height: m, data: values0 },
r
);
blurX(
{ width: n, height: m, data: values0 },
{ width: n, height: m, data: values1 },
r
);
blurY(
{ width: n, height: m, data: values1 },
{ width: n, height: m, data: values0 },
r
);
return Object.assign(values0, { width: n, height: m });
};
}