【问题标题】:cant save canvas to image - tainted canvas - react app无法将画布保存到图像 - 受污染的画布 - 反应应用程序
【发布时间】:2017-11-08 20:30:19
【问题描述】:

canvas.toDataURL() 行后,我收到一个错误

无法在“HTMLCanvasElement”上执行“toDataURL”:受污染的画布 不能导出

我尝试自己搜索解决方案,具有交叉来源,但这对我没有帮助。有没有可能下载在画布上创建的图像?我看到了toDataURL() 的例子,但不幸的是这些对我不起作用。我会考虑其他解决方案。

   _handleSaveButton(){
    var canvas = document.getElementById('memesCanvas');
    console.log(canvas);
    
    var canvasimage=document.createElement("img");
    canvasimage.setAttribute('crossOrigin','anonymous');
    canvasimage = canvas.toDataURL('image/png');
    canvasimage.replace(/^data:image\/[^;]/, 'data:application/octet-stream');
    alert(canvasimage);
  }
 
 <ReactButton onClick={() => this._handleSaveButton()} styleName={'generate-meme'} name='generate meme'/>

【问题讨论】:

  • canvasimage.crossOrigin = '*';也无济于事
  • 您是否尝试过接受的答案here中提到的其他解决方案?
  • 您是否在任何地方使用drawImage()?您如何加载您提供给drawImage() 的图像?是否通过file:// 协议?图片是否在不同的域中?

标签: javascript html reactjs canvas


【解决方案1】:

我在不久前的一次代码挑战中这样做了。不确定这是否正是您所需要的,但我希望它有所帮助。

import React, { Component } from "react";

class Save extends Component{
  saveCanvas() {
    const canvasSave = document.getElementById('resetCanvas');
    const d = canvasSave.toDataURL('image/png');
    const w = window.open('about:blank', 'image from canvas');
    w.document.write("<img src='"+d+"' alt='from canvas'/>");
    console.log('Saved!');
  }

  render(){
    return(
      <div>
        <button onClick={ this.saveCanvas }>Save</button>
      </div>
    )
  }
}

export default Save;

【讨论】:

  • 感谢您的帮助,顺便说一句,我不知道为什么,但只是 window.open 返回错误-带有'about:blank'-根本没有错误:)
  • 很高兴我能帮上忙! :)
  • 在任何情况下都不应操纵 DOM。请参考此链接stackoverflow.com/questions/41435734/…
猜你喜欢
  • 2014-07-11
  • 2018-02-11
  • 2016-04-07
  • 2013-08-20
  • 2013-02-07
  • 2016-11-11
  • 2014-09-14
  • 2020-03-25
  • 2017-11-22
相关资源
最近更新 更多