如何同步获取Canvas的Blob值?现有方案是否有优化空间?
同步获取Canvas Blob值的优化疑问
需求背景
- 无法使用
toBlob的Promise方案:外部代码无法修改,也无法等待Promise完成,若改用Promise会导致所有外部函数都需适配异步逻辑 - 当前处于提交FormData的函数中,这是向已收集的FormData注入图片的最后时机
现有同步实现方案
我通过toDataURL实现了同步获取Blob的方法,同时有个疑问:为何toDataURL是同步的而toBlob不是?
以下是我的实现代码:
public getBlob(dataType?: string, quality?: number): Blob { let dataUrl: string = this.canvas.toDataURL(dataType, quality) let i: number; let byteString: string; let mimeString: string; let ia: Uint8Array; if(dataUrl.split(',')[0].indexOf('base64') >= 0) byteString = atob(dataUrl.split(',')[1]); else byteString = unescape(dataUrl.split(',')[1]); mimeString = dataUrl.split(',')[0].split(':')[1].split(';')[0]; ia = new Uint8Array(byteString.length); for(i = 0; i < byteString.length; i++) ia[i] = byteString.charCodeAt(i); return new Blob([ia], {type: mimeString}); }
疑问
请问是否有更优或更快的实现方式?
内容的提问来源于stack exchange,提问作者SuperNova
相关产品推荐
相关产品推荐

