2012-06-07 28 views
5

Tôi muốn tham gia nhiều canvases để tạo một hình ảnh. Vì vậy, có phương pháp nào để tách nhiều hơn một canvas thành toDataURL để tạo một hình ảnh không?chuyển đổi nhiều canvas thành dataURL trong html5

+1

Bạn có thể sao chép tất cả các bản vẽ của tranh vẽ thành một khung tạm thời lớn hơn và sau đó gọi 'toDataURL()' của phần sau. – Ammar

+0

thnx @Ammar bạn có thể cung cấp cho tôi tài liệu tham khảo plz –

+1

@Muhammad Usmar: Câu trả lời được cung cấp bởi 'bennedich' bên dưới là cách tiếp cận tương tự mà tôi đã nói đến. Sử dụng hàm 'drawImage()' của canvas. Đối với bất kỳ khó khăn hơn nữa cho chúng tôi biết. – Ammar

Trả lời

3

thử ví dụ này hy vọng nó sẽ giúp xem here

   //html block 


       <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"> 


       </canvas> 
       <canvas id="myCanvas1" width="200" height="100" style="border:1px solid #c3c3c3;"> 
       Your browser does not support the canvas element. 
       </canvas> 

       <canvas id="Canvasimage" width="500" height="100" style="border:1px solid #c3c3c3;"> 
       Your browser does not support the canvas element. 
       </canvas> 
    <img id="finalimage" width="500" height="100" style="border:1px solid #c3c3c3;"/> 

       //script block 
       function loadImages(sources, callback) { 
        var images = {}; 
        var loadedImages = 0; 
        var numImages = 0; 
        // get num of sources 
        for (var src in sources) { 
         numImages++; 
        } 
        for (var src in sources) { 
         images[src] = new Image(); 
         images[src].onload = function() { 
          if (++loadedImages >= numImages) { 
           callback(images); 
          } 
         }; 
         images[src].src = sources[src]; 
        } 
       } 

       window.onload = function (images) { 

      //Canvas first here 
        var c = document.getElementById("myCanvas"); 
        var ctx = c.getContext("2d"); 
        ctx.fillStyle = "#FF0000"; 
        ctx.fillRect(0, 0, 200, 100); 
       //Canvas second here 
        var c1 = document.getElementById("myCanvas1"); 
        var ctx1 = c1.getContext("2d"); 
        ctx1.fillStyle = "#00FF00"; 
        ctx1.fillRect(0, 0, 200, 100); 


       //Canvas final here. 
        var canvas = document.getElementById("Canvasimage"); 
        var context = canvas.getContext("2d"); 

        var sources = { 
         darthVader: c.toDataURL("image/png"), 
         yoda: c1.toDataURL("image/png") 
        }; 

        loadImages(sources, function (images) { 
         context.drawImage(images.darthVader, 100, 30, 200, 137); 
         context.drawImage(images.yoda, 350, 55, 93, 104); 
//finalimage here which has two canvas data 
       var finalimage = document.getElementById("finalimage"); 
     finalimage.src = canvas.toDataURL("image/png"); 
        }); 
       }; 
+0

không. có một canvas và nhiều hình ảnh. Tôi cần nhiều canvases –

+2

@Rana Muhammad Usman cập nhật Trả lời plz xem. – Tamkeen

4

Có, phương pháp drawImage trên bối cảnh hiển thị canvas 2d chấp nhận yếu tố canvas làm yếu tố hình ảnh. Vì vậy, tất cả các bạn phải làm là:

  • Tạo một vải mới
  • Nhận ngữ cảnh của nó
  • Vẽ tất cả các bức tranh sơn dầu khác để nó với drawImage
  • Trích xuất hình ảnh cuối cùng từ vải mới này
5

tạo một hàm lấy nhiều đối số (các phần tử canvas), đặt chúng trên một canvas trống, sau đó trả về dataurl cho canvas mới tạo.

var getImadeData = function() { 
    var i = arguments.length, 
     tempCanvas = document.createElement("canvas"), 
     ctx = tempCanvas.getContext("2d"); 
    while (i--) { 
     ctx.drawImage(arguments[i], 0, 0); 
    }; 
    return tempCanvas.toDataURL(); 
}; 

Bây giờ, chỉ cần nạp hàm nhiều phần tử canvas bạn muốn đưa vào một dataurl như vậy.

var newData = getImageData(canvas1, canvas2, canvas3); 

Trong ví dụ này, canvas cuối cùng được đặt trên canvas trống trước để đảm bảo đặt hàng các phần tử canvas của bạn một cách thích hợp.

+0

vui lòng cung cấp một số giải thích cùng với mã. Bằng cách đó du khách trong tương lai sẽ biết những gì họ đang tìm kiếm và bạn có thể nhận được upvotes hơn cho những đóng góp của bạn –

+2

Tôi thêm một số lời giải thích, nhưng nó thành thật cảm thấy một chút thừa. Có điều gì đặc biệt mà bạn cảm thấy cần chi tiết hơn không? – r11