【问题标题】:Download canvas image using JS Jquery使用 JS Jquery 下载画布图像
【发布时间】:2015-12-18 00:49:39
【问题描述】:

我正在尝试使用以下代码将画布图像下载到桌面:

<script type="text/javascript">
    var canvas;
    $(document).ready(function() {
      if ($('#designs-wrapper').length) {
        $('.design').each(function() {
          var design = $(this).attr('data-design');
          var canvas = $(this).find('canvas')[0];
          var ctx = canvas.getContext('2d');
          var img = new Image;
          img.onload = function() {
            ctx.drawImage(this, 0, 0);
          };
          img.src = design;
        });
      }

      $('#canvas').click(function() {
        this.href = canvas.toDataURL();
        this.download = 'design.png';
      });

    });
</script>

很遗憾,我收到以下错误:

未捕获的类型错误:无法读取未定义的属性“toDataURL”

有人知道如何解决这个问题吗?

实时预览:http://dane.helpful.ninja/fds/index.php?username=z-justin

简介:1) 点击图片 2) 查看开发控制台

编辑:

更新代码后如下:

在全局范围内定义画布 从var canvas = $(this).find('canvas')[0]; 中删除var

弹出如下错误:

未捕获的安全错误:无法在“HTMLCanvasElement”上执行“toDataURL”:可能无法导出受污染的画布。

【问题讨论】:

  • global-scope 中定义 canvasvar canvas = $(this).find('canvas')[0]; 中删除 var
  • 使用实时预览更新问题。

标签: javascript jquery canvas


【解决方案1】:

您不能在回调就绪方法中使用画布变量,因为此方法被执行并且画布变量的范围将结束。当你调用点击回调时,不会有canvas变量的任何实例,因为它已经结束了。

<script type="text/javascript">
    var canvas;
    $(document).ready(function() {
      if ($('#designs-wrapper').length) {
        $('.design').each(function() {
          var design = $(this).attr('data-design');
          var canvas = $(this).find('canvas')[0];
          var ctx = canvas.getContext('2d');
          var img = new Image;
          img.onload = function() {
            ctx.drawImage(this, 0, 0);
          };
          img.src = design;
        });
      }

      $('#canvas').click(function() {
        this.href = $('#canvas')[0].toDataURL();// Change here
        this.download = 'design.png';
      });

    });
</script>

【讨论】:

  • 现在出现以下错误:未捕获的安全错误:无法在“HTMLCanvasElement”上执行“toDataURL”:可能无法导出受污染的画布。有什么想法吗?
  • 对于那个错误,这个stackoverflow.com/questions/20424279/…的问题可能会对你有所帮助。
猜你喜欢
  • 2017-11-17
  • 2011-11-06
  • 2017-06-22
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2014-11-07
相关资源
最近更新 更多