drawing images on 3 layer canvas and saving

后端 未结 1 1271
闹比i
闹比i 2021-01-07 11:43

I have a 3 layers of canvas, which I have given a separate id to each.

This is what I am doing.

HTML

相关标签:
1条回答
  • 2021-01-07 12:22

    To draw on all three “layers” you must create contexts for all layers

    // references to layer1
    var canvas1 = document.getElementById('layer1');
    var context1 = canvas1.getContext('2d');
    
    // references to layer2
    var canvas2 = document.getElementById('layer2');
    var context2 = canvas2.getContext('2d');
    
    // references to layer3
    var canvas3 = document.getElementById('layer3');
    var context3 = canvas3.getContext('2d');
    

    Then after you’re done drawing on all layers, merge them (here merged onto layer1):

    // merge all layers onto layer1
    context1.drawImage(canvas2,0,0);
    context1.drawImage(canvas3,0,0);
    

    And finally save the merged canvas to an image and set your img src to that image.

    // save the merged drawings as an image
    // and set the img element src to that merged image
    var img=new Image();
    img.onload=function(){
        document.getElementById("results").src=img.src;
    }
    img.src=canvas1.toDataURL();
    

    Here is code and a Fiddle: http://jsfiddle.net/m1erickson/fhjwY/

    <!doctype html>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    
    <style>
        body{ background-color: ivory; }
        canvas{border:1px solid red;}
    </style>
    
    <script>
    $(function(){
    
    // references to layer1
    var canvas1 = document.getElementById('layer1');
    var context1 = canvas1.getContext('2d');
    
    // references to layer2
    var canvas2 = document.getElementById('layer2');
    var context2 = canvas2.getContext('2d');
    
    // references to layer3
    var canvas3 = document.getElementById('layer3');
    var context3 = canvas3.getContext('2d');
    
    // draw stuff on the layers
    context1.fillStyle="red";
    context2.fillStyle="blue";
    context3.fillStyle="green";
    
    context1.fillRect(20,20,50,50);
    context2.fillRect(50,50,50,50);
    context3.fillRect(80,80,50,50);
    
    // merge all layers onto layer1
    context1.drawImage(canvas2,0,0);
    context1.drawImage(canvas3,0,0);
    
    // save the merged drawings as an image
    // and set the img element src to that merged image
    var img=new Image();
    img.onload=function(){
        document.getElementById("results").src=img.src;
    }
    img.src=canvas1.toDataURL();
    
    
    
    }); // end $(function(){});
    </script>
    
    </head>
    
    <body>
        <p>Draw rects on 3 canvases</p>
        <p>Merge all drawings to 1st canvas</p>
        <p>Create an image from merged drawings</p>
        <p>Set the image element with that merged image</p>
        <canvas id="layer1" width=150 height=150></canvas>
        <canvas id="layer2" width=150 height=150></canvas><br>
        <canvas id="layer3" width=150 height=150></canvas>
        <img id="results" width=150 height=150>
    </body>
    </html>
    
    0 讨论(0)
提交回复
热议问题