From 7978c4c9a2d72d8b83aa4e463eedb80da18a672a Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Thu, 16 Jul 2020 12:18:06 +0100 Subject: [PATCH] feat(image): add useOffsetWidth option for scaled images --- dist/stackblur-es.js | 10 ++++++---- dist/stackblur-es.min.js | 2 +- dist/stackblur-es.min.js.map | 2 +- dist/stackblur.js | 10 ++++++---- dist/stackblur.min.js | 2 +- dist/stackblur.min.js.map | 2 +- index.d.ts | 3 ++- src/stackblur.js | 11 +++++++---- 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/dist/stackblur-es.js b/dist/stackblur-es.js index 39c59e2..4af40b8 100644 --- a/dist/stackblur-es.js +++ b/dist/stackblur-es.js @@ -72,10 +72,11 @@ var shgTable = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 1 * @param {string|HTMLCanvasElement} canvas * @param {Float} radius * @param {boolean} blurAlphaChannel + * @param {boolean} useOffsetWidth * @returns {undefined} */ -function processImage(img, canvas, radius, blurAlphaChannel) { +function processImage(img, canvas, radius, blurAlphaChannel, useOffsetWidth) { if (typeof img === 'string') { img = document.getElementById(img); } @@ -84,8 +85,9 @@ function processImage(img, canvas, radius, blurAlphaChannel) { return; } - var w = img.naturalWidth; - var h = img.naturalHeight; + var dimensionType = useOffsetWidth ? 'offset' : 'natural'; + var w = img[dimensionType + 'Width']; + var h = img[dimensionType + 'Height']; if (typeof canvas === 'string') { canvas = document.getElementById(canvas); @@ -101,7 +103,7 @@ function processImage(img, canvas, radius, blurAlphaChannel) { canvas.height = h; var context = canvas.getContext('2d'); context.clearRect(0, 0, w, h); - context.drawImage(img, 0, 0); + context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h); if (isNaN(radius) || radius < 1) { return; diff --git a/dist/stackblur-es.min.js b/dist/stackblur-es.min.js index 8872ada..de61bd7 100644 --- a/dist/stackblur-es.min.js +++ b/dist/stackblur-es.min.js @@ -1,2 +1,2 @@ -function t(r){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(r)}var r=[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],a=[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];function n(t,r,a,n){if("string"==typeof t&&(t=document.getElementById(t)),t&&"naturalWidth"in t){var e=t.naturalWidth,i=t.naturalHeight;if("string"==typeof r&&(r=document.getElementById(r)),r&&"getContext"in r){r.style.width=e+"px",r.style.height=i+"px",r.width=e,r.height=i;var g=r.getContext("2d");g.clearRect(0,0,e,i),g.drawImage(t,0,0),isNaN(a)||a<1||(n?o(r,0,0,e,i,a):f(r,0,0,e,i,a))}}}function e(r,a,n,e,o){if("string"==typeof r&&(r=document.getElementById(r)),!(r&&"object"===t(r)&&"getContext"in r))throw new TypeError("Expecting canvas with `getContext` method in processCanvasRGB(A) calls!");var i=r.getContext("2d");try{return i.getImageData(a,n,e,o)}catch(t){throw new Error("unable to access image data: "+t)}}function o(t,r,a,n,o,f){if(!(isNaN(f)||f<1)){f|=0;var g=e(t,r,a,n,o);g=i(g,r,a,n,o,f),t.getContext("2d").putImageData(g,r,a)}}function i(t,n,e,o,i,f){for(var g,s=t.data,c=2*f+1,u=o-1,l=i-1,x=f+1,b=x*(x+1)/2,y=new v,m=y,h=1;h>E;if(s[C+3]=Z,0!==Z){var $=255/Z;s[C]=(F*B>>E)*$,s[C+1]=(J*B>>E)*$,s[C+2]=(K*B>>E)*$}else s[C]=s[C+1]=s[C+2]=0;F-=H,J-=k,K-=q,L-=z,H-=d.r,k-=d.g,q-=d.b,z-=d.a;var _=Y+f+1;_=w+(_>E,vt>0?(vt=255/vt,s[Rt]=(xt*B>>E)*vt,s[Rt+1]=(bt*B>>E)*vt,s[Rt+2]=(yt*B>>E)*vt):s[Rt]=s[Rt+1]=s[Rt+2]=0,xt-=st,bt-=ct,yt-=ut,mt-=lt,st-=d.r,ct-=d.g,ut-=d.b,lt-=d.a,Rt=ot+((Rt=Nt+x)>E,s[N+1]=H*B>>E,s[N+2]=k*B>>E,j-=A,H-=T,k-=W,A-=w.r,T-=w.g,W-=w.b,d=I+((d=L+f+1)>E,s[d+1]=Z*B>>E,s[d+2]=$*B>>E,Y-=U,Z-=V,$-=X,U-=w.r,V-=w.g,X-=w.b,d=M+((d=ot+x)>E;if(s[C+3]=Z,0!==Z){var $=255/Z;s[C]=(F*B>>E)*$,s[C+1]=(J*B>>E)*$,s[C+2]=(K*B>>E)*$}else s[C]=s[C+1]=s[C+2]=0;F-=j,J-=k,K-=q,L-=z,j-=d.r,k-=d.g,q-=d.b,z-=d.a;var _=Y+f+1;_=w+(_>E,vt>0?(vt=255/vt,s[Rt]=(xt*B>>E)*vt,s[Rt+1]=(bt*B>>E)*vt,s[Rt+2]=(yt*B>>E)*vt):s[Rt]=s[Rt+1]=s[Rt+2]=0,xt-=st,bt-=ut,yt-=ct,ht-=lt,st-=d.r,ut-=d.g,ct-=d.b,lt-=d.a,Rt=ot+((Rt=Nt+x)>E,s[N+1]=j*B>>E,s[N+2]=k*B>>E,T-=A,j-=W,k-=H,A-=w.r,W-=w.g,H-=w.b,d=I+((d=L+f+1)>E,s[d+1]=Z*B>>E,s[d+2]=$*B>>E,Y-=U,Z-=V,$-=X,U-=w.r,V-=w.g,X-=w.b,d=M+((d=ot+x)> shgSum;\n pixels[yi + 3] = paInitial;\n if (paInitial !== 0) {\n const pa = 255 / paInitial;\n pixels[yi] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[yi + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[yi + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n let p = x + radius + 1;\n p = (yw + (p < widthMinus1\n ? p\n : widthMinus1)) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n aInSum += (stackIn.a = pixels[p + 3]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n\n stackIn = stackIn.next;\n\n /* eslint-disable no-shadow */\n const {\n r: pr,\n g: pg,\n b: pb,\n a: pa\n } = stackOut;\n /* eslint-enable no-shadow */\n\n rOutSum += pr;\n gOutSum += pg;\n bOutSum += pb;\n aOutSum += pa;\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let yp = width;\n\n let gInSum = 0, bInSum = 0, aInSum = 0, rInSum = 0;\n for (let i = 1; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = (pr = pixels[yi])) * rbs;\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n aSum += (stack.a = (pa = pixels[yi + 3])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n let p = yi << 2;\n pixels[p + 3] = pa = (aSum * mulSum) >> shgSum;\n if (pa > 0) {\n pa = 255 / pa;\n pixels[p] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[p + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[p + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n aSum += (aInSum += (stackIn.a = pixels[p + 3]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n aOutSum += (pa = stackOut.a);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGB (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGB (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n let stackIn = null;\n let stackOut = null;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n let p, rbs;\n let yw = 0, yi = 0;\n\n for (let y = 0; y < height; y++) {\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1; i < radiusPlus1; i++) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n rSum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[p + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[p + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n pixels[yi] = (rSum * mulSum) >> shgSum;\n pixels[yi + 1] = (gSum * mulSum) >> shgSum;\n pixels[yi + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (yw + (\n (p = x + radius + 1) < widthMinus1 ? p : widthMinus1\n )) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1, yp = width; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n rSum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n p = yi << 2;\n pixels[p] = (rSum * mulSum) >> shgSum;\n pixels[p + 1] = (gSum * mulSum) >> shgSum;\n pixels[p + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\n/**\n *\n */\nexport class BlurStack {\n /**\n * Set properties.\n */\n constructor () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n }\n}\n\nexport {\n /**\n * @function module:StackBlur.image\n * @see module:StackBlur~processImage\n */\n processImage as image,\n /**\n * @function module:StackBlur.canvasRGBA\n * @see module:StackBlur~processCanvasRGBA\n */\n processCanvasRGBA as canvasRGBA,\n /**\n * @function module:StackBlur.canvasRGB\n * @see module:StackBlur~processCanvasRGB\n */\n processCanvasRGB as canvasRGB,\n /**\n * @function module:StackBlur.imageDataRGBA\n * @see module:StackBlur~processImageDataRGBA\n */\n processImageDataRGBA as imageDataRGBA,\n /**\n * @function module:StackBlur.imageDataRGB\n * @see module:StackBlur~processImageDataRGB\n */\n processImageDataRGB as imageDataRGB\n};\n"],"names":["mulTable","shgTable","processImage","img","canvas","radius","blurAlphaChannel","document","getElementById","w","naturalWidth","h","naturalHeight","style","width","height","context","getContext","clearRect","drawImage","isNaN","processCanvasRGBA","processCanvasRGB","getImageDataFromCanvas","topX","topY","_typeof","TypeError","getImageData","e","Error","imageData","processImageDataRGBA","putImageData","stackEnd","pixels","data","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","i","next","stackIn","stackOut","yw","yi","mulSum","shgSum","y","pr","pg","pb","pa","r","g","b","a","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","p","rbs","x","paInitial","yp","processImageDataRGB"],"mappings":"qOA0CA,IAAMA,EAAW,CACf,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlEC,EAAW,CACf,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GA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"} \ No newline at end of file +{"version":3,"file":"stackblur-es.min.js","sources":["../src/stackblur.js"],"sourcesContent":["/* eslint-disable no-bitwise, unicorn/prefer-query-selector */\n/**\n* StackBlur - a fast almost Gaussian Blur For Canvas\n*\n* In case you find this class useful - especially in commercial projects -\n* I am not totally unhappy for a small donation to my PayPal account\n* mario@quasimondo.de\n*\n* Or support me on flattr:\n* {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}.\n*\n* @module StackBlur\n* @author Mario Klingemann\n* Contact: mario@quasimondo.com\n* Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}\n* Twitter: @quasimondo\n*\n* @copyright (c) 2010 Mario Klingemann\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/* eslint-disable max-len */\nconst mulTable = [\n 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512,\n 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512,\n 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456,\n 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512,\n 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328,\n 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456,\n 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335,\n 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512,\n 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405,\n 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328,\n 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,\n 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456,\n 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388,\n 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335,\n 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292,\n 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259\n];\n\nconst shgTable = [\n 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,\n 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,\n 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\n 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24\n];\n/* eslint-enable max-len */\n\n/**\n * @param {string|HTMLImageElement} img\n * @param {string|HTMLCanvasElement} canvas\n * @param {Float} radius\n * @param {boolean} blurAlphaChannel\n * @param {boolean} useOffsetWidth\n * @returns {undefined}\n */\nfunction processImage (img, canvas, radius, blurAlphaChannel, useOffsetWidth) {\n if (typeof img === 'string') {\n img = document.getElementById(img);\n }\n if (!img || !('naturalWidth' in img)) {\n return;\n }\n\n const dimensionType = useOffsetWidth ? 'offset' : 'natural';\n const w = img[dimensionType + 'Width'];\n const h = img[dimensionType + 'Height'];\n\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n if (!canvas || !('getContext' in canvas)) {\n return;\n }\n\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n canvas.width = w;\n canvas.height = h;\n\n const context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h);\n\n if (isNaN(radius) || radius < 1) { return; }\n\n if (blurAlphaChannel) {\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n } else {\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n }\n}\n\n/**\n * @param {string|HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @throws {Error|TypeError}\n * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}\n */\nfunction getImageDataFromCanvas (canvas, topX, topY, width, height) {\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n if (!canvas || typeof canvas !== 'object' || !('getContext' in canvas)) {\n throw new TypeError(\n 'Expecting canvas with `getContext` method ' +\n 'in processCanvasRGB(A) calls!'\n );\n }\n\n const context = canvas.getContext('2d');\n\n try {\n return context.getImageData(topX, topY, width, height);\n } catch (e) {\n throw new Error('unable to access image data: ' + e);\n }\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGBA (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n\n imageData = processImageDataRGBA(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGBA (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n\n let stackIn = null,\n stackOut = null,\n yw = 0,\n yi = 0;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n for (let y = 0; y < height; y++) {\n stack = stackStart;\n\n const pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3];\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0, aInSum = 0,\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n for (let i = 1; i < radiusPlus1; i++) {\n const p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n\n /* eslint-disable no-shadow */\n const pr = pixels[p],\n pg = pixels[p + 1],\n pb = pixels[p + 2],\n pa = pixels[p + 3];\n /* eslint-enable no-shadow */\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = pr) * rbs;\n gSum += (stack.g = pg) * rbs;\n bSum += (stack.b = pb) * rbs;\n aSum += (stack.a = pa) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n const paInitial = (aSum * mulSum) >> shgSum;\n pixels[yi + 3] = paInitial;\n if (paInitial !== 0) {\n const pa = 255 / paInitial;\n pixels[yi] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[yi + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[yi + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n let p = x + radius + 1;\n p = (yw + (p < widthMinus1\n ? p\n : widthMinus1)) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n aInSum += (stackIn.a = pixels[p + 3]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n\n stackIn = stackIn.next;\n\n /* eslint-disable no-shadow */\n const {\n r: pr,\n g: pg,\n b: pb,\n a: pa\n } = stackOut;\n /* eslint-enable no-shadow */\n\n rOutSum += pr;\n gOutSum += pg;\n bOutSum += pb;\n aOutSum += pa;\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let yp = width;\n\n let gInSum = 0, bInSum = 0, aInSum = 0, rInSum = 0;\n for (let i = 1; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = (pr = pixels[yi])) * rbs;\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n aSum += (stack.a = (pa = pixels[yi + 3])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n let p = yi << 2;\n pixels[p + 3] = pa = (aSum * mulSum) >> shgSum;\n if (pa > 0) {\n pa = 255 / pa;\n pixels[p] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[p + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[p + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n aSum += (aInSum += (stackIn.a = pixels[p + 3]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n aOutSum += (pa = stackOut.a);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGB (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGB (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n let stackIn = null;\n let stackOut = null;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n let p, rbs;\n let yw = 0, yi = 0;\n\n for (let y = 0; y < height; y++) {\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1; i < radiusPlus1; i++) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n rSum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[p + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[p + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n pixels[yi] = (rSum * mulSum) >> shgSum;\n pixels[yi + 1] = (gSum * mulSum) >> shgSum;\n pixels[yi + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (yw + (\n (p = x + radius + 1) < widthMinus1 ? p : widthMinus1\n )) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1, yp = width; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n rSum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n p = yi << 2;\n pixels[p] = (rSum * mulSum) >> shgSum;\n pixels[p + 1] = (gSum * mulSum) >> shgSum;\n pixels[p + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\n/**\n *\n */\nexport class BlurStack {\n /**\n * Set properties.\n */\n constructor () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n }\n}\n\nexport {\n /**\n * @function module:StackBlur.image\n * @see module:StackBlur~processImage\n */\n processImage as image,\n /**\n * @function module:StackBlur.canvasRGBA\n * @see module:StackBlur~processCanvasRGBA\n */\n processCanvasRGBA as canvasRGBA,\n /**\n * @function module:StackBlur.canvasRGB\n * @see module:StackBlur~processCanvasRGB\n */\n processCanvasRGB as canvasRGB,\n /**\n * @function module:StackBlur.imageDataRGBA\n * @see module:StackBlur~processImageDataRGBA\n */\n processImageDataRGBA as imageDataRGBA,\n /**\n * @function module:StackBlur.imageDataRGB\n * @see module:StackBlur~processImageDataRGB\n */\n processImageDataRGB as imageDataRGB\n};\n"],"names":["mulTable","shgTable","processImage","img","canvas","radius","blurAlphaChannel","useOffsetWidth","document","getElementById","dimensionType","w","h","style","width","height","context","getContext","clearRect","drawImage","naturalWidth","naturalHeight","isNaN","processCanvasRGBA","processCanvasRGB","getImageDataFromCanvas","topX","topY","_typeof","TypeError","getImageData","e","Error","imageData","processImageDataRGBA","putImageData","stackEnd","pixels","data","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","i","next","stackIn","stackOut","yw","yi","mulSum","shgSum","y","pr","pg","pb","pa","r","g","b","a","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","p","rbs","x","paInitial","yp","processImageDataRGB"],"mappings":"qOA0CA,IAAMA,EAAW,CACf,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlEC,EAAW,CACf,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GA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"} \ No newline at end of file diff --git a/dist/stackblur.js b/dist/stackblur.js index d052131..3ec3963 100644 --- a/dist/stackblur.js +++ b/dist/stackblur.js @@ -78,10 +78,11 @@ * @param {string|HTMLCanvasElement} canvas * @param {Float} radius * @param {boolean} blurAlphaChannel + * @param {boolean} useOffsetWidth * @returns {undefined} */ - function processImage(img, canvas, radius, blurAlphaChannel) { + function processImage(img, canvas, radius, blurAlphaChannel, useOffsetWidth) { if (typeof img === 'string') { img = document.getElementById(img); } @@ -90,8 +91,9 @@ return; } - var w = img.naturalWidth; - var h = img.naturalHeight; + var dimensionType = useOffsetWidth ? 'offset' : 'natural'; + var w = img[dimensionType + 'Width']; + var h = img[dimensionType + 'Height']; if (typeof canvas === 'string') { canvas = document.getElementById(canvas); @@ -107,7 +109,7 @@ canvas.height = h; var context = canvas.getContext('2d'); context.clearRect(0, 0, w, h); - context.drawImage(img, 0, 0); + context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h); if (isNaN(radius) || radius < 1) { return; diff --git a/dist/stackblur.min.js b/dist/stackblur.min.js index 965424f..59f83c9 100644 --- a/dist/stackblur.min.js +++ b/dist/stackblur.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).StackBlur={})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=[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],n=[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];function a(t,r,n,a,o){if("string"==typeof t&&(t=document.getElementById(t)),!(t&&"object"===e(t)&&"getContext"in t))throw new TypeError("Expecting canvas with `getContext` method in processCanvasRGB(A) calls!");var i=t.getContext("2d");try{return i.getImageData(r,n,a,o)}catch(t){throw new Error("unable to access image data: "+t)}}function o(t,e,r,n,o,f){if(!(isNaN(f)||f<1)){f|=0;var g=a(t,e,r,n,o);g=i(g,e,r,n,o,f),t.getContext("2d").putImageData(g,e,r)}}function i(t,e,a,o,i,f){for(var g,c=t.data,v=2*f+1,l=o-1,s=i-1,x=f+1,b=x*(x+1)/2,d=new u,y=d,p=1;p>E;if(c[B+3]=Y,0!==Y){var Z=255/Y;c[B]=(O*C>>E)*Z,c[B+1]=(P*C>>E)*Z,c[B+2]=(q*C>>E)*Z}else c[B]=c[B+1]=c[B+2]=0;O-=W,P-=_,q-=H,z-=M,W-=m.r,_-=m.g,H-=m.b,M-=m.a;var $=X+f+1;$=w+($>E,ut>0?(ut=255/ut,c[Nt]=(xt*C>>E)*ut,c[Nt+1]=(bt*C>>E)*ut,c[Nt+2]=(dt*C>>E)*ut):c[Nt]=c[Nt+1]=c[Nt+2]=0,xt-=ct,bt-=vt,dt-=lt,yt-=st,ct-=m.r,vt-=m.g,lt-=m.b,st-=m.a,Nt=ot+((Nt=St+x)>E,c[S+1]=W*C>>E,c[S+2]=_*C>>E,T-=j,W-=A,_-=k,j-=w.r,A-=w.g,k-=w.b,m=I+((m=z+f+1)>E,c[m+1]=Y*C>>E,c[m+2]=Z*C>>E,X-=Q,Y-=U,Z-=V,Q-=w.r,U-=w.g,V-=w.b,m=F+((m=ot+x)>E;if(c[B+3]=Y,0!==Y){var Z=255/Y;c[B]=(O*C>>E)*Z,c[B+1]=(P*C>>E)*Z,c[B+2]=(q*C>>E)*Z}else c[B]=c[B+1]=c[B+2]=0;O-=H,P-=T,q-=_,z-=M,H-=h.r,T-=h.g,_-=h.b,M-=h.a;var $=X+f+1;$=w+($>E,ut>0?(ut=255/ut,c[Nt]=(xt*C>>E)*ut,c[Nt+1]=(bt*C>>E)*ut,c[Nt+2]=(dt*C>>E)*ut):c[Nt]=c[Nt+1]=c[Nt+2]=0,xt-=ct,bt-=lt,dt-=st,yt-=vt,ct-=h.r,lt-=h.g,st-=h.b,vt-=h.a,Nt=ot+((Nt=St+x)>E,c[S+1]=H*C>>E,c[S+2]=T*C>>E,k-=j,H-=A,T-=W,j-=w.r,A-=w.g,W-=w.b,h=I+((h=z+f+1)>E,c[h+1]=Y*C>>E,c[h+2]=Z*C>>E,X-=Q,Y-=U,Z-=V,Q-=w.r,U-=w.g,V-=w.b,h=F+((h=ot+x)> shgSum;\n pixels[yi + 3] = paInitial;\n if (paInitial !== 0) {\n const pa = 255 / paInitial;\n pixels[yi] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[yi + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[yi + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n let p = x + radius + 1;\n p = (yw + (p < widthMinus1\n ? p\n : widthMinus1)) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n aInSum += (stackIn.a = pixels[p + 3]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n\n stackIn = stackIn.next;\n\n /* eslint-disable no-shadow */\n const {\n r: pr,\n g: pg,\n b: pb,\n a: pa\n } = stackOut;\n /* eslint-enable no-shadow */\n\n rOutSum += pr;\n gOutSum += pg;\n bOutSum += pb;\n aOutSum += pa;\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let yp = width;\n\n let gInSum = 0, bInSum = 0, aInSum = 0, rInSum = 0;\n for (let i = 1; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = (pr = pixels[yi])) * rbs;\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n aSum += (stack.a = (pa = pixels[yi + 3])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n let p = yi << 2;\n pixels[p + 3] = pa = (aSum * mulSum) >> shgSum;\n if (pa > 0) {\n pa = 255 / pa;\n pixels[p] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[p + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[p + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n aSum += (aInSum += (stackIn.a = pixels[p + 3]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n aOutSum += (pa = stackOut.a);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGB (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGB (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n let stackIn = null;\n let stackOut = null;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n let p, rbs;\n let yw = 0, yi = 0;\n\n for (let y = 0; y < height; y++) {\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1; i < radiusPlus1; i++) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n rSum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[p + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[p + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n pixels[yi] = (rSum * mulSum) >> shgSum;\n pixels[yi + 1] = (gSum * mulSum) >> shgSum;\n pixels[yi + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (yw + (\n (p = x + radius + 1) < widthMinus1 ? p : widthMinus1\n )) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1, yp = width; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n rSum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n p = yi << 2;\n pixels[p] = (rSum * mulSum) >> shgSum;\n pixels[p + 1] = (gSum * mulSum) >> shgSum;\n pixels[p + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\n/**\n *\n */\nexport class BlurStack {\n /**\n * Set properties.\n */\n constructor () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n }\n}\n\nexport {\n /**\n * @function module:StackBlur.image\n * @see module:StackBlur~processImage\n */\n processImage as image,\n /**\n * @function module:StackBlur.canvasRGBA\n * @see module:StackBlur~processCanvasRGBA\n */\n processCanvasRGBA as canvasRGBA,\n /**\n * @function module:StackBlur.canvasRGB\n * @see module:StackBlur~processCanvasRGB\n */\n processCanvasRGB as canvasRGB,\n /**\n * @function module:StackBlur.imageDataRGBA\n * @see module:StackBlur~processImageDataRGBA\n */\n processImageDataRGBA as imageDataRGBA,\n /**\n * @function module:StackBlur.imageDataRGB\n * @see module:StackBlur~processImageDataRGB\n */\n processImageDataRGB as imageDataRGB\n};\n"],"names":["mulTable","shgTable","getImageDataFromCanvas","canvas","topX","topY","width","height","document","getElementById","_typeof","TypeError","context","getContext","getImageData","e","Error","processCanvasRGBA","radius","isNaN","imageData","processImageDataRGBA","putImageData","stackEnd","pixels","data","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","i","next","stackIn","stackOut","yw","yi","mulSum","shgSum","y","pr","pg","pb","pa","r","g","b","a","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","p","rbs","x","paInitial","yp","processCanvasRGB","processImageDataRGB","img","blurAlphaChannel","w","naturalWidth","h","naturalHeight","style","clearRect","drawImage"],"mappings":"4aA0CA,IAAMA,EAAW,CACf,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlEC,EAAW,CACf,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GA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"} \ No newline at end of file +{"version":3,"file":"stackblur.min.js","sources":["../src/stackblur.js"],"sourcesContent":["/* eslint-disable no-bitwise, unicorn/prefer-query-selector */\n/**\n* StackBlur - a fast almost Gaussian Blur For Canvas\n*\n* In case you find this class useful - especially in commercial projects -\n* I am not totally unhappy for a small donation to my PayPal account\n* mario@quasimondo.de\n*\n* Or support me on flattr:\n* {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}.\n*\n* @module StackBlur\n* @author Mario Klingemann\n* Contact: mario@quasimondo.com\n* Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}\n* Twitter: @quasimondo\n*\n* @copyright (c) 2010 Mario Klingemann\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/* eslint-disable max-len */\nconst mulTable = [\n 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512,\n 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512,\n 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456,\n 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512,\n 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328,\n 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456,\n 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335,\n 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512,\n 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405,\n 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328,\n 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,\n 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456,\n 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388,\n 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335,\n 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292,\n 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259\n];\n\nconst shgTable = [\n 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,\n 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,\n 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\n 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24\n];\n/* eslint-enable max-len */\n\n/**\n * @param {string|HTMLImageElement} img\n * @param {string|HTMLCanvasElement} canvas\n * @param {Float} radius\n * @param {boolean} blurAlphaChannel\n * @param {boolean} useOffsetWidth\n * @returns {undefined}\n */\nfunction processImage (img, canvas, radius, blurAlphaChannel, useOffsetWidth) {\n if (typeof img === 'string') {\n img = document.getElementById(img);\n }\n if (!img || !('naturalWidth' in img)) {\n return;\n }\n\n const dimensionType = useOffsetWidth ? 'offset' : 'natural';\n const w = img[dimensionType + 'Width'];\n const h = img[dimensionType + 'Height'];\n\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n if (!canvas || !('getContext' in canvas)) {\n return;\n }\n\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n canvas.width = w;\n canvas.height = h;\n\n const context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h);\n\n if (isNaN(radius) || radius < 1) { return; }\n\n if (blurAlphaChannel) {\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n } else {\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n }\n}\n\n/**\n * @param {string|HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @throws {Error|TypeError}\n * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}\n */\nfunction getImageDataFromCanvas (canvas, topX, topY, width, height) {\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n if (!canvas || typeof canvas !== 'object' || !('getContext' in canvas)) {\n throw new TypeError(\n 'Expecting canvas with `getContext` method ' +\n 'in processCanvasRGB(A) calls!'\n );\n }\n\n const context = canvas.getContext('2d');\n\n try {\n return context.getImageData(topX, topY, width, height);\n } catch (e) {\n throw new Error('unable to access image data: ' + e);\n }\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGBA (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n\n imageData = processImageDataRGBA(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGBA (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n\n let stackIn = null,\n stackOut = null,\n yw = 0,\n yi = 0;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n for (let y = 0; y < height; y++) {\n stack = stackStart;\n\n const pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3];\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0, aInSum = 0,\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n for (let i = 1; i < radiusPlus1; i++) {\n const p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n\n /* eslint-disable no-shadow */\n const pr = pixels[p],\n pg = pixels[p + 1],\n pb = pixels[p + 2],\n pa = pixels[p + 3];\n /* eslint-enable no-shadow */\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = pr) * rbs;\n gSum += (stack.g = pg) * rbs;\n bSum += (stack.b = pb) * rbs;\n aSum += (stack.a = pa) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n const paInitial = (aSum * mulSum) >> shgSum;\n pixels[yi + 3] = paInitial;\n if (paInitial !== 0) {\n const pa = 255 / paInitial;\n pixels[yi] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[yi + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[yi + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n let p = x + radius + 1;\n p = (yw + (p < widthMinus1\n ? p\n : widthMinus1)) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n aInSum += (stackIn.a = pixels[p + 3]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n\n stackIn = stackIn.next;\n\n /* eslint-disable no-shadow */\n const {\n r: pr,\n g: pg,\n b: pb,\n a: pa\n } = stackOut;\n /* eslint-enable no-shadow */\n\n rOutSum += pr;\n gOutSum += pg;\n bOutSum += pb;\n aOutSum += pa;\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n let yp = width;\n\n let gInSum = 0, bInSum = 0, aInSum = 0, rInSum = 0;\n for (let i = 1; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n const rbs = radiusPlus1 - i;\n rSum += (stack.r = (pr = pixels[yi])) * rbs;\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n aSum += (stack.a = (pa = pixels[yi + 3])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n aInSum += pa;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n let p = yi << 2;\n pixels[p + 3] = pa = (aSum * mulSum) >> shgSum;\n if (pa > 0) {\n pa = 255 / pa;\n pixels[p] = ((rSum * mulSum) >> shgSum) * pa;\n pixels[p + 1] = ((gSum * mulSum) >> shgSum) * pa;\n pixels[p + 2] = ((bSum * mulSum) >> shgSum) * pa;\n } else {\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n aSum += (aInSum += (stackIn.a = pixels[p + 3]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n aOutSum += (pa = stackOut.a);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n aInSum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\nfunction processCanvasRGB (canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) { return; }\n radius |= 0;\n\n let imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(\n imageData, topX, topY, width, height, radius\n );\n\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\nfunction processImageDataRGB (imageData, topX, topY, width, height, radius) {\n const pixels = imageData.data;\n\n const div = 2 * radius + 1;\n // const w4 = width << 2;\n const widthMinus1 = width - 1;\n const heightMinus1 = height - 1;\n const radiusPlus1 = radius + 1;\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n const stackStart = new BlurStack();\n let stack = stackStart;\n let stackEnd;\n for (let i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n stack.next = stackStart;\n let stackIn = null;\n let stackOut = null;\n\n const mulSum = mulTable[radius];\n const shgSum = shgTable[radius];\n\n let p, rbs;\n let yw = 0, yi = 0;\n\n for (let y = 0; y < height; y++) {\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1; i < radiusPlus1; i++) {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n rSum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[p + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[p + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let x = 0; x < width; x++) {\n pixels[yi] = (rSum * mulSum) >> shgSum;\n pixels[yi + 1] = (gSum * mulSum) >> shgSum;\n pixels[yi + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (yw + (\n (p = x + radius + 1) < widthMinus1 ? p : widthMinus1\n )) << 2;\n\n rInSum += (stackIn.r = pixels[p]);\n gInSum += (stackIn.g = pixels[p + 1]);\n bInSum += (stackIn.b = pixels[p + 2]);\n\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n for (let x = 0; x < width; x++) {\n yi = x << 2;\n let pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n\n stack = stackStart;\n\n for (let i = 0; i < radiusPlus1; i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n let rInSum = 0, gInSum = 0, bInSum = 0;\n for (let i = 1, yp = width; i <= radius; i++) {\n yi = (yp + x) << 2;\n\n rSum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n gSum += (stack.g = (pg = pixels[yi + 1])) * rbs;\n bSum += (stack.b = (pb = pixels[yi + 2])) * rbs;\n\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n\n stack = stack.next;\n\n if (i < heightMinus1) {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (let y = 0; y < height; y++) {\n p = yi << 2;\n pixels[p] = (rSum * mulSum) >> shgSum;\n pixels[p + 1] = (gSum * mulSum) >> shgSum;\n pixels[p + 2] = (bSum * mulSum) >> shgSum;\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n\n p = (x + (\n ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) *\n width\n )) << 2;\n\n rSum += (rInSum += (stackIn.r = pixels[p]));\n gSum += (gInSum += (stackIn.g = pixels[p + 1]));\n bSum += (bInSum += (stackIn.b = pixels[p + 2]));\n\n stackIn = stackIn.next;\n\n rOutSum += (pr = stackOut.r);\n gOutSum += (pg = stackOut.g);\n bOutSum += (pb = stackOut.b);\n\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\n/**\n *\n */\nexport class BlurStack {\n /**\n * Set properties.\n */\n constructor () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n }\n}\n\nexport {\n /**\n * @function module:StackBlur.image\n * @see module:StackBlur~processImage\n */\n processImage as image,\n /**\n * @function module:StackBlur.canvasRGBA\n * @see module:StackBlur~processCanvasRGBA\n */\n processCanvasRGBA as canvasRGBA,\n /**\n * @function module:StackBlur.canvasRGB\n * @see module:StackBlur~processCanvasRGB\n */\n processCanvasRGB as canvasRGB,\n /**\n * @function module:StackBlur.imageDataRGBA\n * @see module:StackBlur~processImageDataRGBA\n */\n processImageDataRGBA as imageDataRGBA,\n /**\n * @function module:StackBlur.imageDataRGB\n * @see module:StackBlur~processImageDataRGB\n */\n processImageDataRGB as imageDataRGB\n};\n"],"names":["mulTable","shgTable","getImageDataFromCanvas","canvas","topX","topY","width","height","document","getElementById","_typeof","TypeError","context","getContext","getImageData","e","Error","processCanvasRGBA","radius","isNaN","imageData","processImageDataRGBA","putImageData","stackEnd","pixels","data","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","i","next","stackIn","stackOut","yw","yi","mulSum","shgSum","y","pr","pg","pb","pa","r","g","b","a","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","p","rbs","x","paInitial","yp","processCanvasRGB","processImageDataRGB","img","blurAlphaChannel","useOffsetWidth","dimensionType","w","h","style","clearRect","drawImage","naturalWidth","naturalHeight"],"mappings":"4aA0CA,IAAMA,EAAW,CACf,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlEC,EAAW,CACf,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GA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"} \ No newline at end of file diff --git a/index.d.ts b/index.d.ts index dbdcf45..b459a52 100644 --- a/index.d.ts +++ b/index.d.ts @@ -10,7 +10,8 @@ export function image( img: HTMLImageElement | string, canvas: HTMLCanvasElement | string, radius: number, - blurAlphaChannel?: boolean + blurAlphaChannel?: boolean, + useOffsetWidth?: boolean, ): void; export function canvasRGBA( diff --git a/src/stackblur.js b/src/stackblur.js index 56748dd..8807024 100644 --- a/src/stackblur.js +++ b/src/stackblur.js @@ -84,17 +84,20 @@ const shgTable = [ * @param {string|HTMLCanvasElement} canvas * @param {Float} radius * @param {boolean} blurAlphaChannel + * @param {boolean} useOffsetWidth * @returns {undefined} */ -function processImage (img, canvas, radius, blurAlphaChannel) { +function processImage (img, canvas, radius, blurAlphaChannel, useOffsetWidth) { if (typeof img === 'string') { img = document.getElementById(img); } if (!img || !('naturalWidth' in img)) { return; } - const w = img.naturalWidth; - const h = img.naturalHeight; + + const dimensionType = useOffsetWidth ? 'offset' : 'natural'; + const w = img[dimensionType + 'Width']; + const h = img[dimensionType + 'Height']; if (typeof canvas === 'string') { canvas = document.getElementById(canvas); @@ -110,7 +113,7 @@ function processImage (img, canvas, radius, blurAlphaChannel) { const context = canvas.getContext('2d'); context.clearRect(0, 0, w, h); - context.drawImage(img, 0, 0); + context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h); if (isNaN(radius) || radius < 1) { return; }