function moir(imgData) { var width = imgData.width, height = imgData.height, pixelData = imgData.data, Center_X = (width + 1) / 2, Center_Y = (height + 1) / 2, Degree = Degree || 20, beta; for (var i = 1; i < height; i++) { for (j = 1; j < width; j++) { x0 = j - Center_X; y0 = Center_Y - i; if (x0 != 0) { beta = Math.atan(y0 / x0); } if (x0 < 0) { beta = beta + Math.PI; } else { beta = Math.PI / 2; } var radius = Math.sqrt(x0 * x0 + y0 * y0); beta = beta + radius * Degree; x = radius * Math.sin(beta); y = radius * Math.cos(beta); if (x > 1 && x < width && y < height && y > 1) { x1 = Math.floor(x); y1 = Math.floor(y); p = x - x1; q = y - y1; var r0 = for_img(x1, y1, p, q, 0); var g0 = for_img(x1, y1, p, q, 1); var b0 = for_img(x1, y1, p, q, 2); var p = i * canvas.width + j; pixelData[p * 4 + 0] = r0; pixelData[p * 4 + 1] = g0; pixelData[p * 4 + 2] = b0; } } } function for_img(x, y, p, q, n) { return pixelData[(x * width + y) * 4 + n] * (1 - p) * (1 - q) + pixelData[(x * width + y + 1) * 4 + n] * p * (1 - q) + pixelData[((x + 1) * width + y) * 4 + n] * q * (1 - p) + pixelData[((x + 1) * width + y + 1) * 4 + n] * p * q } imgData.data = pixelData; return imgData; }