【问题标题】:HTML5 canvas toDataURL sometimes returns "data:," instead of the imageHTML5 画布 toDataURL 有时会返回“data:”而不是图像
【发布时间】:2013-04-11 05:12:39
【问题描述】:

我用document.createElement("canvas")创建了一个画布:

var canvas = document.createElement("canvas");
canvas.width = width;     // width = 4000 or more
canvas.height = height;   // height = 5000 or more

然后我使用canvas.toDataURL() 来获取它的base64字符串:

var str = canvas.toDataURL();

但“str”有时会返回为"data:,",其中没有图像数据。就这六个字符。

有时它会返回正确的字符串,例如"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAEGgAABPsCAYAAABg/aH3AAAgAElEQVR4XuzcQREAAAjDM..."

我的canvas.width 太大了....

【问题讨论】:

标签: javascript html html5-canvas


【解决方案1】:

您应该尝试显式创建 2D 上下文,然后在其中绘制一个空形状,例如:

var canvas = document.createElement("canvas");
canvas.width = 4000;
canvas.height = 5000;
var ctx=canvas.getContext('2d');
ctx.fillRect(0,0,0,0);
canvas.toDataURL();

编辑:您的画布似乎包含太多数据,无法导出为 dataUri:

var canvas = document.createElement("canvas");
canvas.width = 400000000;
canvas.height = 500000000;
var ctx=canvas.getContext('2d');
ctx.fillRect(0,0,0,0);
canvas.toDataURL();
// outputs : "data:,"

【讨论】:

  • 我试过你的方法,可惜没有效果......让我困惑的是,有时是错误的,但有时是正确的。我是新来的 html..canvas.toDataURL() 在哪种情况下返回 "data:,"
  • 我假设当图像为空时,它可能会发生,但是,我必须知道你在哪个浏览器中遇到了这个问题。我在 Chrome 和 Firefox 上进行了测试,但从未发生过。
  • 我好像你的画布太大了,我试过这个: var canvas = document.createElement("canvas"); canvas.width = 400000000;画布.高度 = 500000000; var ctx=canvas.getContext('2d'); ctx.fillRect(0,0,0,0); canvas.toDataURL();我得到了同样的结果:数据:;在 Google Chrome 中,由于 dataUri 的最大大小,它必须是一个限制。
猜你喜欢
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
相关资源
最近更新 更多