Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

569 строки
18 KiB

  1. function _typeof(obj) {
  2. if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
  3. _typeof = function (obj) {
  4. return typeof obj;
  5. };
  6. } else {
  7. _typeof = function (obj) {
  8. return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  9. };
  10. }
  11. return _typeof(obj);
  12. }
  13. function _classCallCheck(instance, Constructor) {
  14. if (!(instance instanceof Constructor)) {
  15. throw new TypeError("Cannot call a class as a function");
  16. }
  17. }
  18. /**
  19. * StackBlur - a fast almost Gaussian Blur For Canvas
  20. *
  21. * In case you find this class useful - especially in commercial projects -
  22. * I am not totally unhappy for a small donation to my PayPal account
  23. * mario@quasimondo.de
  24. *
  25. * Or support me on flattr:
  26. * {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}
  27. * @module StackBlur
  28. * @version 0.5
  29. * @author Mario Klingemann
  30. * Contact: mario@quasimondo.com
  31. * Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}
  32. * Twitter: @quasimondo
  33. *
  34. * @copyright (c) 2010 Mario Klingemann
  35. *
  36. * Permission is hereby granted, free of charge, to any person
  37. * obtaining a copy of this software and associated documentation
  38. * files (the "Software"), to deal in the Software without
  39. * restriction, including without limitation the rights to use,
  40. * copy, modify, merge, publish, distribute, sublicense, and/or sell
  41. * copies of the Software, and to permit persons to whom the
  42. * Software is furnished to do so, subject to the following
  43. * conditions:
  44. *
  45. * The above copyright notice and this permission notice shall be
  46. * included in all copies or substantial portions of the Software.
  47. *
  48. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  49. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  50. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  51. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  52. * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  53. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  54. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  55. * OTHER DEALINGS IN THE SOFTWARE.
  56. */
  57. var mulTable = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];
  58. var shgTable = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];
  59. /**
  60. * @param {string|HTMLImageElement} img
  61. * @param {string|HTMLCanvasElement} canvas
  62. * @param {Float} radius
  63. * @param {boolean} blurAlphaChannel
  64. * @returns {undefined}
  65. */
  66. function processImage(img, canvas, radius, blurAlphaChannel) {
  67. if (typeof img === 'string') {
  68. img = document.getElementById(img);
  69. }
  70. if (!img || !('naturalWidth' in img)) {
  71. return;
  72. }
  73. var w = img.naturalWidth;
  74. var h = img.naturalHeight;
  75. if (typeof canvas === 'string') {
  76. canvas = document.getElementById(canvas);
  77. }
  78. if (!canvas || !('getContext' in canvas)) {
  79. return;
  80. }
  81. canvas.style.width = w + 'px';
  82. canvas.style.height = h + 'px';
  83. canvas.width = w;
  84. canvas.height = h;
  85. var context = canvas.getContext('2d');
  86. context.clearRect(0, 0, w, h);
  87. context.drawImage(img, 0, 0);
  88. if (isNaN(radius) || radius < 1) {
  89. return;
  90. }
  91. if (blurAlphaChannel) {
  92. processCanvasRGBA(canvas, 0, 0, w, h, radius);
  93. } else {
  94. processCanvasRGB(canvas, 0, 0, w, h, radius);
  95. }
  96. }
  97. /**
  98. * @param {string|HTMLCanvasElement} canvas
  99. * @param {Integer} topX
  100. * @param {Integer} topY
  101. * @param {Integer} width
  102. * @param {Integer} height
  103. * @throws {Error|TypeError}
  104. * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}
  105. */
  106. function getImageDataFromCanvas(canvas, topX, topY, width, height) {
  107. if (typeof canvas === 'string') {
  108. canvas = document.getElementById(canvas);
  109. }
  110. if (!canvas || _typeof(canvas) !== 'object' || !('getContext' in canvas)) {
  111. throw new TypeError('Expecting canvas with `getContext` method in processCanvasRGB(A) calls!');
  112. }
  113. var context = canvas.getContext('2d');
  114. try {
  115. return context.getImageData(topX, topY, width, height);
  116. } catch (e) {
  117. throw new Error('unable to access image data: ' + e);
  118. }
  119. }
  120. /**
  121. * @param {HTMLCanvasElement} canvas
  122. * @param {Integer} topX
  123. * @param {Integer} topY
  124. * @param {Integer} width
  125. * @param {Integer} height
  126. * @param {Float} radius
  127. * @returns {undefined}
  128. */
  129. function processCanvasRGBA(canvas, topX, topY, width, height, radius) {
  130. if (isNaN(radius) || radius < 1) {
  131. return;
  132. }
  133. radius |= 0;
  134. var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);
  135. imageData = processImageDataRGBA(imageData, topX, topY, width, height, radius);
  136. canvas.getContext('2d').putImageData(imageData, topX, topY);
  137. }
  138. /**
  139. * @param {ImageData} imageData
  140. * @param {Integer} topX
  141. * @param {Integer} topY
  142. * @param {Integer} width
  143. * @param {Integer} height
  144. * @param {Float} radius
  145. * @returns {ImageData}
  146. */
  147. function processImageDataRGBA(imageData, topX, topY, width, height, radius) {
  148. var pixels = imageData.data;
  149. var x, y, i, p, yp, yi, yw, rSum, gSum, bSum, aSum, rOutSum, gOutSum, bOutSum, aOutSum, rInSum, gInSum, bInSum, aInSum, pr, pg, pb, pa, rbs;
  150. var div = 2 * radius + 1; // const w4 = width << 2;
  151. var widthMinus1 = width - 1;
  152. var heightMinus1 = height - 1;
  153. var radiusPlus1 = radius + 1;
  154. var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
  155. var stackStart = new BlurStack();
  156. var stack = stackStart;
  157. var stackEnd;
  158. for (i = 1; i < div; i++) {
  159. stack = stack.next = new BlurStack();
  160. if (i === radiusPlus1) {
  161. stackEnd = stack;
  162. }
  163. }
  164. stack.next = stackStart;
  165. var stackIn = null;
  166. var stackOut = null;
  167. yw = yi = 0;
  168. var mulSum = mulTable[radius];
  169. var shgSum = shgTable[radius];
  170. for (y = 0; y < height; y++) {
  171. rInSum = gInSum = bInSum = aInSum = rSum = gSum = bSum = aSum = 0;
  172. rOutSum = radiusPlus1 * (pr = pixels[yi]);
  173. gOutSum = radiusPlus1 * (pg = pixels[yi + 1]);
  174. bOutSum = radiusPlus1 * (pb = pixels[yi + 2]);
  175. aOutSum = radiusPlus1 * (pa = pixels[yi + 3]);
  176. rSum += sumFactor * pr;
  177. gSum += sumFactor * pg;
  178. bSum += sumFactor * pb;
  179. aSum += sumFactor * pa;
  180. stack = stackStart;
  181. for (i = 0; i < radiusPlus1; i++) {
  182. stack.r = pr;
  183. stack.g = pg;
  184. stack.b = pb;
  185. stack.a = pa;
  186. stack = stack.next;
  187. }
  188. for (i = 1; i < radiusPlus1; i++) {
  189. p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
  190. rSum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i);
  191. gSum += (stack.g = pg = pixels[p + 1]) * rbs;
  192. bSum += (stack.b = pb = pixels[p + 2]) * rbs;
  193. aSum += (stack.a = pa = pixels[p + 3]) * rbs;
  194. rInSum += pr;
  195. gInSum += pg;
  196. bInSum += pb;
  197. aInSum += pa;
  198. stack = stack.next;
  199. }
  200. stackIn = stackStart;
  201. stackOut = stackEnd;
  202. for (x = 0; x < width; x++) {
  203. pixels[yi + 3] = pa = aSum * mulSum >> shgSum;
  204. if (pa !== 0) {
  205. pa = 255 / pa;
  206. pixels[yi] = (rSum * mulSum >> shgSum) * pa;
  207. pixels[yi + 1] = (gSum * mulSum >> shgSum) * pa;
  208. pixels[yi + 2] = (bSum * mulSum >> shgSum) * pa;
  209. } else {
  210. pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;
  211. }
  212. rSum -= rOutSum;
  213. gSum -= gOutSum;
  214. bSum -= bOutSum;
  215. aSum -= aOutSum;
  216. rOutSum -= stackIn.r;
  217. gOutSum -= stackIn.g;
  218. bOutSum -= stackIn.b;
  219. aOutSum -= stackIn.a;
  220. p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2;
  221. rInSum += stackIn.r = pixels[p];
  222. gInSum += stackIn.g = pixels[p + 1];
  223. bInSum += stackIn.b = pixels[p + 2];
  224. aInSum += stackIn.a = pixels[p + 3];
  225. rSum += rInSum;
  226. gSum += gInSum;
  227. bSum += bInSum;
  228. aSum += aInSum;
  229. stackIn = stackIn.next;
  230. rOutSum += pr = stackOut.r;
  231. gOutSum += pg = stackOut.g;
  232. bOutSum += pb = stackOut.b;
  233. aOutSum += pa = stackOut.a;
  234. rInSum -= pr;
  235. gInSum -= pg;
  236. bInSum -= pb;
  237. aInSum -= pa;
  238. stackOut = stackOut.next;
  239. yi += 4;
  240. }
  241. yw += width;
  242. }
  243. for (x = 0; x < width; x++) {
  244. gInSum = bInSum = aInSum = rInSum = gSum = bSum = aSum = rSum = 0;
  245. yi = x << 2;
  246. rOutSum = radiusPlus1 * (pr = pixels[yi]);
  247. gOutSum = radiusPlus1 * (pg = pixels[yi + 1]);
  248. bOutSum = radiusPlus1 * (pb = pixels[yi + 2]);
  249. aOutSum = radiusPlus1 * (pa = pixels[yi + 3]);
  250. rSum += sumFactor * pr;
  251. gSum += sumFactor * pg;
  252. bSum += sumFactor * pb;
  253. aSum += sumFactor * pa;
  254. stack = stackStart;
  255. for (i = 0; i < radiusPlus1; i++) {
  256. stack.r = pr;
  257. stack.g = pg;
  258. stack.b = pb;
  259. stack.a = pa;
  260. stack = stack.next;
  261. }
  262. yp = width;
  263. for (i = 1; i <= radius; i++) {
  264. yi = yp + x << 2;
  265. rSum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i);
  266. gSum += (stack.g = pg = pixels[yi + 1]) * rbs;
  267. bSum += (stack.b = pb = pixels[yi + 2]) * rbs;
  268. aSum += (stack.a = pa = pixels[yi + 3]) * rbs;
  269. rInSum += pr;
  270. gInSum += pg;
  271. bInSum += pb;
  272. aInSum += pa;
  273. stack = stack.next;
  274. if (i < heightMinus1) {
  275. yp += width;
  276. }
  277. }
  278. yi = x;
  279. stackIn = stackStart;
  280. stackOut = stackEnd;
  281. for (y = 0; y < height; y++) {
  282. p = yi << 2;
  283. pixels[p + 3] = pa = aSum * mulSum >> shgSum;
  284. if (pa > 0) {
  285. pa = 255 / pa;
  286. pixels[p] = (rSum * mulSum >> shgSum) * pa;
  287. pixels[p + 1] = (gSum * mulSum >> shgSum) * pa;
  288. pixels[p + 2] = (bSum * mulSum >> shgSum) * pa;
  289. } else {
  290. pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;
  291. }
  292. rSum -= rOutSum;
  293. gSum -= gOutSum;
  294. bSum -= bOutSum;
  295. aSum -= aOutSum;
  296. rOutSum -= stackIn.r;
  297. gOutSum -= stackIn.g;
  298. bOutSum -= stackIn.b;
  299. aOutSum -= stackIn.a;
  300. p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2;
  301. rSum += rInSum += stackIn.r = pixels[p];
  302. gSum += gInSum += stackIn.g = pixels[p + 1];
  303. bSum += bInSum += stackIn.b = pixels[p + 2];
  304. aSum += aInSum += stackIn.a = pixels[p + 3];
  305. stackIn = stackIn.next;
  306. rOutSum += pr = stackOut.r;
  307. gOutSum += pg = stackOut.g;
  308. bOutSum += pb = stackOut.b;
  309. aOutSum += pa = stackOut.a;
  310. rInSum -= pr;
  311. gInSum -= pg;
  312. bInSum -= pb;
  313. aInSum -= pa;
  314. stackOut = stackOut.next;
  315. yi += width;
  316. }
  317. }
  318. return imageData;
  319. }
  320. /**
  321. * @param {HTMLCanvasElement} canvas
  322. * @param {Integer} topX
  323. * @param {Integer} topY
  324. * @param {Integer} width
  325. * @param {Integer} height
  326. * @param {Float} radius
  327. * @returns {undefined}
  328. */
  329. function processCanvasRGB(canvas, topX, topY, width, height, radius) {
  330. if (isNaN(radius) || radius < 1) {
  331. return;
  332. }
  333. radius |= 0;
  334. var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);
  335. imageData = processImageDataRGB(imageData, topX, topY, width, height, radius);
  336. canvas.getContext('2d').putImageData(imageData, topX, topY);
  337. }
  338. /**
  339. * @param {ImageData} imageData
  340. * @param {Integer} topX
  341. * @param {Integer} topY
  342. * @param {Integer} width
  343. * @param {Integer} height
  344. * @param {Float} radius
  345. * @returns {ImageData}
  346. */
  347. function processImageDataRGB(imageData, topX, topY, width, height, radius) {
  348. var pixels = imageData.data;
  349. var x, y, i, p, yp, yi, yw, rSum, gSum, bSum, rOutSum, gOutSum, bOutSum, rInSum, gInSum, bInSum, pr, pg, pb, rbs;
  350. var div = 2 * radius + 1; // const w4 = width << 2;
  351. var widthMinus1 = width - 1;
  352. var heightMinus1 = height - 1;
  353. var radiusPlus1 = radius + 1;
  354. var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
  355. var stackStart = new BlurStack();
  356. var stack = stackStart;
  357. var stackEnd;
  358. for (i = 1; i < div; i++) {
  359. stack = stack.next = new BlurStack();
  360. if (i === radiusPlus1) {
  361. stackEnd = stack;
  362. }
  363. }
  364. stack.next = stackStart;
  365. var stackIn = null;
  366. var stackOut = null;
  367. yw = yi = 0;
  368. var mulSum = mulTable[radius];
  369. var shgSum = shgTable[radius];
  370. for (y = 0; y < height; y++) {
  371. rInSum = gInSum = bInSum = rSum = gSum = bSum = 0;
  372. rOutSum = radiusPlus1 * (pr = pixels[yi]);
  373. gOutSum = radiusPlus1 * (pg = pixels[yi + 1]);
  374. bOutSum = radiusPlus1 * (pb = pixels[yi + 2]);
  375. rSum += sumFactor * pr;
  376. gSum += sumFactor * pg;
  377. bSum += sumFactor * pb;
  378. stack = stackStart;
  379. for (i = 0; i < radiusPlus1; i++) {
  380. stack.r = pr;
  381. stack.g = pg;
  382. stack.b = pb;
  383. stack = stack.next;
  384. }
  385. for (i = 1; i < radiusPlus1; i++) {
  386. p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
  387. rSum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i);
  388. gSum += (stack.g = pg = pixels[p + 1]) * rbs;
  389. bSum += (stack.b = pb = pixels[p + 2]) * rbs;
  390. rInSum += pr;
  391. gInSum += pg;
  392. bInSum += pb;
  393. stack = stack.next;
  394. }
  395. stackIn = stackStart;
  396. stackOut = stackEnd;
  397. for (x = 0; x < width; x++) {
  398. pixels[yi] = rSum * mulSum >> shgSum;
  399. pixels[yi + 1] = gSum * mulSum >> shgSum;
  400. pixels[yi + 2] = bSum * mulSum >> shgSum;
  401. rSum -= rOutSum;
  402. gSum -= gOutSum;
  403. bSum -= bOutSum;
  404. rOutSum -= stackIn.r;
  405. gOutSum -= stackIn.g;
  406. bOutSum -= stackIn.b;
  407. p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2;
  408. rInSum += stackIn.r = pixels[p];
  409. gInSum += stackIn.g = pixels[p + 1];
  410. bInSum += stackIn.b = pixels[p + 2];
  411. rSum += rInSum;
  412. gSum += gInSum;
  413. bSum += bInSum;
  414. stackIn = stackIn.next;
  415. rOutSum += pr = stackOut.r;
  416. gOutSum += pg = stackOut.g;
  417. bOutSum += pb = stackOut.b;
  418. rInSum -= pr;
  419. gInSum -= pg;
  420. bInSum -= pb;
  421. stackOut = stackOut.next;
  422. yi += 4;
  423. }
  424. yw += width;
  425. }
  426. for (x = 0; x < width; x++) {
  427. gInSum = bInSum = rInSum = gSum = bSum = rSum = 0;
  428. yi = x << 2;
  429. rOutSum = radiusPlus1 * (pr = pixels[yi]);
  430. gOutSum = radiusPlus1 * (pg = pixels[yi + 1]);
  431. bOutSum = radiusPlus1 * (pb = pixels[yi + 2]);
  432. rSum += sumFactor * pr;
  433. gSum += sumFactor * pg;
  434. bSum += sumFactor * pb;
  435. stack = stackStart;
  436. for (i = 0; i < radiusPlus1; i++) {
  437. stack.r = pr;
  438. stack.g = pg;
  439. stack.b = pb;
  440. stack = stack.next;
  441. }
  442. yp = width;
  443. for (i = 1; i <= radius; i++) {
  444. yi = yp + x << 2;
  445. rSum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i);
  446. gSum += (stack.g = pg = pixels[yi + 1]) * rbs;
  447. bSum += (stack.b = pb = pixels[yi + 2]) * rbs;
  448. rInSum += pr;
  449. gInSum += pg;
  450. bInSum += pb;
  451. stack = stack.next;
  452. if (i < heightMinus1) {
  453. yp += width;
  454. }
  455. }
  456. yi = x;
  457. stackIn = stackStart;
  458. stackOut = stackEnd;
  459. for (y = 0; y < height; y++) {
  460. p = yi << 2;
  461. pixels[p] = rSum * mulSum >> shgSum;
  462. pixels[p + 1] = gSum * mulSum >> shgSum;
  463. pixels[p + 2] = bSum * mulSum >> shgSum;
  464. rSum -= rOutSum;
  465. gSum -= gOutSum;
  466. bSum -= bOutSum;
  467. rOutSum -= stackIn.r;
  468. gOutSum -= stackIn.g;
  469. bOutSum -= stackIn.b;
  470. p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2;
  471. rSum += rInSum += stackIn.r = pixels[p];
  472. gSum += gInSum += stackIn.g = pixels[p + 1];
  473. bSum += bInSum += stackIn.b = pixels[p + 2];
  474. stackIn = stackIn.next;
  475. rOutSum += pr = stackOut.r;
  476. gOutSum += pg = stackOut.g;
  477. bOutSum += pb = stackOut.b;
  478. rInSum -= pr;
  479. gInSum -= pg;
  480. bInSum -= pb;
  481. stackOut = stackOut.next;
  482. yi += width;
  483. }
  484. }
  485. return imageData;
  486. }
  487. /**
  488. *
  489. */
  490. var BlurStack = function BlurStack() {
  491. _classCallCheck(this, BlurStack);
  492. this.r = 0;
  493. this.g = 0;
  494. this.b = 0;
  495. this.a = 0;
  496. this.next = null;
  497. };
  498. export { BlurStack, processImage as image, processCanvasRGBA as canvasRGBA, processCanvasRGB as canvasRGB, processImageDataRGBA as imageDataRGBA, processImageDataRGB as imageDataRGB };