You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同步获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:40:34