2012-06-07 3 views
5

하나의 이미지를 만들기 위해 여러 캔버스에 가입하고 싶습니다. 하나의 이미지를 만들기 위해 하나 이상의 캔버스를 toDataURL으로 변환하는 방법이 있습니까?여러 캔버스를 html5의 dataURL로 변환

+1

모든 캔버스의 그림을 더 큰 임시 캔버스로 복사 한 다음 나중에 'toDataURL()'을 호출 할 수 있습니다. – Ammar

+0

thnx @Ammar 당신이 저에게 참고 plz을 제공 할 수 있습니까 –

+1

@ 뮤 하마드 Usmar : 아래의 'bennedich'가 제공 한 대답은 내가 말한 것과 같은 접근법입니다. 캔버스의'drawImage()'함수를 사용하십시오. 더 이상의 어려움이 있으면 알려주십시오. – Ammar

답변

3

이 예제를 시도해 보면 도움이되기를 바랍니다. 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

번호. 하나의 캔버스와 여러 개의 이미지가 있습니다. 여러 캔버스가 필요합니다 –

+2

@Rana Muhammad Usman 업데이트 됨 응답 plz 참조. – Tamkeen

4

예, 캔버스 2 차원 렌더링 컨텍스트의 drawImage 메서드는 이미지 요소로 캔버스 요소를 허용합니다. 그래서 당신이해야 할 모든은 다음과 같습니다

  • 이 새로운 캔버스에서 최종 이미지를 추출 drawImage
  • 와 다른 모든 캔버스 그리기 컨텍스트 얻기 새로운 캔버스
  • 만들기
5

여러 인자 (캔버스 요소)를 하나의 빈 캔버스에 놓은 다음 새로 만든 캔버스에 대한 dataurl을 반환하는 함수를 만듭니다.

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(); 
}; 

이제는 하나의 데이터 입력란에 넣으려는 여러 개의 캔버스 요소를 피드하십시오.

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

이 예제에서는 마지막 캔버스가 먼저 빈 캔버스에 배치되므로 캔버스 요소를 적절하게 정렬해야합니다.

+0

코드와 함께 몇 가지 설명을하십시오. 그런 식으로 미래의 방문자는 자신이 무엇을보고 있는지 알게되고 기부금에 대한 더 많은 상향 회신을받을 수 있습니다. –

+2

몇 가지 설명을 추가했지만 솔직히 조금 불필요하다고 느낍니다. 특히 세부적인 것이 필요하다고 느낀 점이 있었습니까? – r11

관련 문제