2013-04-18 16 views

Trả lời

3

Ở đây bạn đi;

JSfiddle

  • Nó sẽ lấy mỗi vải và làm cho họ PNG
  • Truy cập vải đệm và viết của PNG trên đầu trang của mỗi khác bên trong nó
  • Viết lưng vải đệm để PNG và gửi nó vào IMG-tag

Chỉ cần cung cấp phần tử canvas #bufferdisplay: none; và mọi thứ sẽ không nhìn thấy được (xem tại đây; http://jsfiddle.net/Allendar/UqxCY/2/).

HTML

<body onload="generatePNG()"> 
    <canvas id="c1"></canvas> 
    <canvas id="c2"></canvas> 
    <canvas id="c3"></canvas> 

    <canvas id="buffer"></canvas> 

    <div id="output">Empty</div> 
</body> 

CSS

canvas[id^=c], div[id=output] { 
    border: 1px solid red; 
} 

canvas[id=buffer] { 
    border: 1px dotted green; 
} 

#output { 
    padding: 15px; 
} 

#output img { 
    border: 1px dotted blue; 
} 

Javascript

function generatePNG() { 
    var b_canvas1 = document.getElementById("c1"); 
    var b_context1 = b_canvas1.getContext("2d"); 
    b_context1.fillRect(10, 50, 50, 50); 
    var b_canvas2 = document.getElementById("c2"); 
    var b_context2 = b_canvas2.getContext("2d"); 
    b_context2.fillRect(80, 50, 50, 50); 
    var b_canvas3 = document.getElementById("c3"); 
    var b_context3 = b_canvas3.getContext("2d"); 
    b_context3.fillRect(150, 50, 50, 50); 

    var img1 = new Image(); 
    img1.src = b_canvas1.toDataURL("image/png"); 
    var img2 = new Image(); 
    img2.src = b_canvas2.toDataURL("image/png"); 
    var img3 = new Image(); 
    img3.src = b_canvas3.toDataURL("image/png"); 

    var buffer = document.getElementById("buffer"); 
    var buffer_context = buffer.getContext("2d"); 
    buffer_context.drawImage(img1, 0, 0); 
    buffer_context.drawImage(img2, 0, 0); 
    buffer_context.drawImage(img3, 0, 0); 

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

    var output = document.getElementById('output'); 
    output.innerHTML = '<img src="' + buffer_img.src + '" alt="Canvas Image" />'; 
} 
+0

Tác phẩm này nhưng bạn đang sử dụng jquery. Có khả năng làm điều đó mà không cần sử dụng jquery? – Julian

+0

Chắc chắn; câu hỏi được cập nhật để bây giờ hoạt động hoàn toàn trên JavaScript gốc. –

+0

Bạn không cần phải tạo hình ảnh trung gian. Phương thức drawImage có thể lấy trực tiếp một canvas khác làm hình ảnh để vẽ. –

0

Có lẽ một cái gì đó như thế này, xuất khẩu vải nguồn đến một hình ảnh, vẽ hình ảnh đó vào khung mục tiêu (chưa được kiểm tra):

function drawCanvasOnOtherCanvas(src, target) { 
    var img = new Image(); 
    img.onload = function() { 
    target.drawImage(img, 0, 0); 
    }; 
    img.src = src.toDataURL('image/png'); 
} 
2

phương pháp drawImage Một của vải có thể thực sự lấy một canvas khác thay vì một hình ảnh - trước tiên bạn không cần phải chuyển đổi canvases thành hình ảnh. (Xem WhatWG's documentation.)

tôi đã đơn giản hóa JSFiddle Allendar để chứng minh:

http://jsfiddle.net/7hEKL/

Về cơ bản, tất cả các bạn cần làm là:

targetCanvas.drawImage(sourceCanvas, 0, 0); 

và bạn nên đối xử tốt với đi.