【问题标题】:Create image from canvas composition从画布合成创建图像
【发布时间】:2012-11-07 02:52:19
【问题描述】:

我有一个由 10 个不同图像组成的画布组合。 这些图像从一个 xml 文件中获取数据,该文件具有一个坐标列表,当它们被放置到画布上时,该坐标列表为每个图像创建一个遮罩。

然后我尝试将画布保存为图像

var image = new Image();
image.src = canvas.toDataURL("image/png");

但是,图像出现完全空白,并且没有错误。检查出现的图像后,src 为:

   data:image/png;base64,iVBORw0KGgoAAAANS...ICxjqAABQ+0HCBAgQIBAWMQ4CcQAAAAAElFTkSuQmCC (shortened)

当从不同域中提取文件时,我阅读了所有关于安全问题、受污染的画布等的信息,但我没有收到任何错误,而且我使用的所有内容都托管在本地 (http://localhost)

关于如何调试的任何想法?

编辑: 我更感兴趣的是在浏览器中将其显示为图像,然后担心以后保存它。但是,如果将其“保存”到本地存储然后显示它可以工作,那么我对此感到失望。

【问题讨论】:

标签: javascript html canvas html5-canvas


【解决方案1】:

你确定在画布被绘制之后调用 toDataUrl 吗?您确定无论您将新图像附加到 DOM 的哪个位置,它都会以适当的宽度/高度/不透明度显示吗?

【讨论】:

  • Yes toDataUrl 是在画布被绘制到之后发生的。正在创建的图像与我的画布大小完全相同,只是完全空白/透明。
  • 无论如何,我希望它与画布大小相同。你提到它在画布被绘制后“正在发生”。但是如果你正在创建新的Image 对象,设置它们的onload 方法来绘制图像,然后设置src,然后立即调用canvas.toDataUrl,你调用的是画布之前的方法,而不是之后。
  • 哇,你的男人,我正在使用 onLoad 设置图像。控制台中的所有内容看起来都以正确的顺序发生,但是使用 onload 设置图像是问题所在。你摇滚。
【解决方案2】:

你们有处理图片上传的函数吗?

https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications#Example.3a.c2.a0Showing_thumbnails_of_user-selected_images

function FileUpload(img, file) {
  var reader = new FileReader();  
  this.ctrl = createThrobber(img);
  var xhr = new XMLHttpRequest();
  this.xhr = xhr;

  var self = this;
  this.xhr.upload.addEventListener("progress", function(e) {
        if (e.lengthComputable) {
          var percentage = Math.round((e.loaded * 100) / e.total);
          self.ctrl.update(percentage);
        }
      }, false);

  xhr.upload.addEventListener("load", function(e){
          self.ctrl.update(100);
          var canvas = self.ctrl.ctx.canvas;
          canvas.parentNode.removeChild(canvas);
      }, false);
  xhr.open("POST", "http://demos.hacks.mozilla.org/paul/demos/resources/webservices/devnull.php");
  xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');
  reader.onload = function(evt) {
    xhr.sendAsBinary(evt.target.result);
  };
  reader.readAsBinaryString(file);
}

【讨论】:

  • 对不起,我认为这无关紧要,我没有任何图片上传,我使用的所有图片都已经在 localhost 上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2023-03-05
  • 2013-05-14
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多