@scandit/web-datacapture-barcode
Version:
Scandit Data Capture SDK for the Web
2 lines • 2.19 kB
JavaScript
import {Size}from'@scandit/web-datacapture-core';import {Deferred}from'@scandit/web-datacapture-core/build/js/private/utils/deferred.js';import {svgToDataURL}from'@scandit/web-datacapture-core/build/js/private/utils/replaceImagesInViewUtils.js';var o=class s{constructor(e,t){var a;this.options={scale:(a=t.scale)!=null?a:1,size:t.size},this.data=e;}static async withHTMLElement(e,t){let a=e.cloneNode(true);return s.getEncodedImageData(a).then(({data:i,size:r})=>new s(i,{size:r,...t}))}static async withBase64EncodedData(e,t){let a=new Deferred,i=new Image;i.addEventListener("error",a.reject,{once:true}),i.src=e,await i.decode();let r=s.getSize(i);return a.resolve(new s(e,{size:r,...t})),a.promise}static async getEncodedImageData(e){let t=await s.getSVGDataForElement(e);return s.getBase64DataFromDataURL(t)}static getSize(e){let t=document.body.contains(e);t||document.body.append(e);let a=e.getBoundingClientRect();return t||e.remove(),new Size(a.width,a.height)}static async getSVGDataForElement(e){"customElements"in window&&customElements.get(e.tagName.toLowerCase())!==void 0&&await customElements.whenDefined(e.tagName.toLowerCase());let t=s.getSize(e),a="http://www.w3.org/2000/svg",i=document.createElementNS(a,"svg"),r=document.createElementNS(a,"foreignObject");return i.setAttribute("width",`${t.width}`),i.setAttribute("height",`${t.height}`),i.setAttribute("viewBox",`0 0 ${t.width} ${t.height}`),r.setAttribute("width","100%"),r.setAttribute("height","100%"),r.setAttribute("x","0"),r.setAttribute("y","0"),r.setAttribute("externalResourcesRequired","true"),i.append(r),r.append(e),{data:await svgToDataURL(i),size:t}}static getCanvasWithSize(e){let t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t}static async getBase64DataFromDataURL(e){var r;let t=new Deferred,a=new Image;a.addEventListener("error",t.reject,{once:true}),a.src=e.data,await a.decode();let i=s.getCanvasWithSize(e.size);return (r=i.getContext("2d"))==null||r.drawImage(a,0,0),t.resolve({data:i.toDataURL("image/png",1),size:e.size}),t.promise}toJSONObject(){return {data:this.data,options:{size:this.options.size.toJSONObject(),scale:this.options.scale}}}};
export{o as a};