【问题标题】:HTML5 - passing Canvas between filesHTML5 - 在文件之间传递 Canvas
【发布时间】:2013-10-26 00:37:41
【问题描述】:

我有两个 html 文件,比如 1.html 和 2.html,其中 1.js 和 2.js 引用了 javascripts。在 1.html 中,我有一个具有拖放功能的 Canvas 对象,因此我使用 drawImage 方法向画布添加其他图像。当我在 1.html 上添加完图像后,我将画布保存到 localStorage。很快就会变成这样:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');

ctx.drawImage(imageObj, x, y, imageObj.width, imageObj.height);
ctx.drawImage(imageObj2, x2, y2, imageObj2.width, imageObj2.height);

localStorage.setItem("context1", ctx);  // Unsure if i should save context or canvas

现在,在 2.html 中,我想检索保存在 1.html 画布中并在 1.html 上设置/应用它,所以我喜欢:

var savedContext = localStorage.getItem("context1");

var canvas1 = document.getElementById('canvas1');
var context1 = savedContext;

而且我没有得到任何结果,我什至不知道是否有可能像那样通过画布上绘制的所有图像,或者也许有其他方法可以这样做

【问题讨论】:

    标签: javascript html html5-canvas


    【解决方案1】:

    您可以通过保存数据 url 而不是尝试保存画布或上下文来做您想做的事情:

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext('2d');
    
    ctx.drawImage(imageObj, x, y, imageObj.width, imageObj.height);
    ctx.drawImage(imageObj2, x2, y2, imageObj2.width, imageObj2.height);
    
    localStorage.setItem("imageData", canvas.toDataUrl());
    

    稍后再恢复:

    var img = document.createElement('img');
    img.src = localStorage.getItem("imageData");
    
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext('2d');
    
    ctx.drawImage(img, x, y, img.width, img.height);
    

    您可能还必须等待 img 上的“onload”事件触发,然后才能在画布上绘制它,但我不确定。

    【讨论】:

    • 在这种情况下,我将其检索为图像,但在我的情况下,我还想知道由 1.html 操作时在画布上绘制的图像的位置 (x, y)。如果我将其保存并检索为图像,那么我将没有关于画布上其他对象的任何信息
    • 没有“画布上的对象”......一个画布元素实际上只是一个绘图状态和一个像素集合。即使您在单个页面上完成所有操作,也无法分辨绘制的内容或位置...
    • 您始终可以在绘制图像时将图像的位置存储到不同的对象中,然后将该对象与数据 url 一起存储...
    • 你说没有办法知道画的是什么,在哪里。但是我在使用 drawImage 方法时指定了位置。然后我可能会保存为图像并分别传递位置参数
    【解决方案2】:

    我认为这不是正确的方法。 原因:localstorage API 只保留字符串键值对。因此,您需要画布元素的字符串表示形式。

    看这里:

    Javascript Canvas Serialization/Deserialization?

    【讨论】:

    • 我已经回复 Prestaul 说我想在画布上保留图像的位置。这是必需的,因为在 2.html 中,这些图像将具有与其 (x, y) 位置相关联的一些属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2012-07-09
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多