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