fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
3 lines (2 loc) • 2.17 kB
JavaScript
import{defineProperty as e,objectSpread2 as t,objectWithoutProperties as a}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{FabricImage as i}from"../shapes/Image.min.mjs";import{createCanvasElement as r}from"../util/misc/dom.min.mjs";import{BaseFilter as s}from"./BaseFilter.min.mjs";import{classRegistry as m}from"../ClassRegistry.min.mjs";import{fragmentSource as o,vertexSource as n}from"./shaders/blendImage.min.mjs";const c=["type","image"],l={mode:"multiply",alpha:1};class g extends s{getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return o[this.mode]}getVertexSource(){return n}applyToWebGL(e){const t=e.context,a=this.createTexture(e.filterBackend,this.image);this.bindAdditionalTexture(t,a,t.TEXTURE1),super.applyToWebGL(e),this.unbindAdditionalTexture(t,t.TEXTURE1)}createTexture(e,t){return e.getCachedTexture(t.cacheKey,t.getElement())}calculateMatrix(){const e=this.image,{width:t,height:a}=e.getElement();return[1/e.scaleX,0,0,0,1/e.scaleY,0,-e.left/t,-e.top/a,1]}applyTo2d(e){let{imageData:{data:t,width:a,height:i},filterBackend:{resources:s}}=e;const m=this.image;s.blendImage||(s.blendImage=r());const o=s.blendImage,n=o.getContext("2d");o.width!==a||o.height!==i?(o.width=a,o.height=i):n.clearRect(0,0,a,i),n.setTransform(m.scaleX,0,0,m.scaleY,m.left,m.top),n.drawImage(m.getElement(),0,0,a,i);const c=n.getImageData(0,0,a,i).data;for(let e=0;e<t.length;e+=4){const a=t[e],i=t[e+1],r=t[e+2],s=t[e+3],m=c[e],o=c[e+1],n=c[e+2],l=c[e+3];switch(this.mode){case"multiply":t[e]=a*m/255,t[e+1]=i*o/255,t[e+2]=r*n/255,t[e+3]=s*l/255;break;case"mask":t[e+3]=l}}}sendUniformData(e,t){const a=this.calculateMatrix();e.uniform1i(t.uImage,1),e.uniformMatrix3fv(t.uTransformMatrix,!1,a)}toObject(){return t(t({},super.toObject()),{},{image:this.image&&this.image.toObject()})}static async fromObject(e,r){let{type:s,image:m}=e,o=a(e,c);return i.fromObject(m,r).then((e=>new this(t(t({},o),{},{image:e}))))}}e(g,"type","BlendImage"),e(g,"defaults",l),e(g,"uniformLocations",["uTransformMatrix","uImage"]),m.setClass(g);export{g as BlendImage,l as blendImageDefaultValues};
//# sourceMappingURL=BlendImage.min.mjs.map