2014-07-21 1 views
1

캔버스에 이미지를 추가 한 다음 이미지 상단에 텍스트를 추가하려고합니다. 텍스트는 텍스트 입력에 바인드됩니다. 문제는 내가 필드를 다시 그리는 대신 텍스트를 입력 할 때 자체 복제한다는 것입니다.캔버스. AngularJS. 텍스트 및 이미지 추가

내 지시어 :

.directive('memeimage', function() { 
     return { 
     restrict: 'A', 
     link: function (scope, el, attrs) { 

      scope.upperText = ""; 
      scope.fontsize = 50; 

      scope.drawCanvas = function() { 

      var canvas = el[0]; 
      var context = canvas.getContext("2d"); 

      context.font = scope.fontsize + "px Impact"; 
      context.fillStyle = 'white'; 
      context.strokeStyle = 'black'; 
      var x = canvas.width/2; 
      var y = canvas.height/6; 
      context.textAlign = 'center'; 
      context.fillText(scope.upperText.toUpperCase(), x, y); 
      context.lineWidth = 2; 
      context.strokeText(scope.upperText.toUpperCase(), x, y); 


      }; 
     } 
     } 
    }); 

여기 바이올린 : http://jsfiddle.net/HB7LU/5085/

어떻게 이런 일을 피하기 위해 텍스트를 복제하지? 동일한 캔버스에서 이미지를 사용하기 때문에 캔버스를 지우는 것은 불가능합니다.

감사합니다.

+0

오버랩 여러 캔버스 요소? 하나는 텍스트 용이고 다른 하나는 이미지 용입니까? 이렇게하면 텍스트를 지울 수 있고 이미지가 그대로 유지됩니다. –

+0

결과 캔버스를 그 후에 하나의 png 이미지로 변환 할 수 있습니까? –

답변

0

쉬운 대답은 여러 개의 겹치는 캔버스 요소를 사용한다는 것입니다. 그러면 텍스트를 지우고 이미지를 그대로 유지할 수 있습니다.

당신이 이미지에 수출 할 준비가되면, 당신은 하나의 이미지에 여러 개의 캔버스를 그릴 아래에있는 솔루션을 사용할 수 있습니다

Save many canvas element as image

+0

흥미 롭습니다. 여러 캔버스없이 어떻게 할 수 있습니까? http://mobiforge.com/design-development/html5-canvas-meme-generator –

+0

@ n8m - 코드가 간단합니다. 텍스트가 바뀔 때마다 캔버스가 지워집니다. 그런 다음 텍스트와 함께 이미지를 변형하고 다시 그립니다. 모든 소스는 디버거에서 볼 수 있습니다. –

0

왜 대신 캔버스의 SVG를 사용하지를? 특히 입력 컨트롤에 바인딩하려는 경우 개별 요소를 더 잘 제어 할 수 있습니다.

0

clearRect를 사용하여 캔버스를 다시 그리거나 캔버스 너비 또는 높이를 변경해야합니다.

Fiddle

c.width = c.width 
+0

이것은 제가 언급 한 이미지를 포함하여 캔버스에있는 다른 것들을 지울 것입니다. –

+0

1) 이미지를 포함한 모든 업데이트를 모든 캔버스를 다시 그립니다. 2) 다중 레이어 캔버스를 유지하십시오. '3) 개별 요소를 관리 할 수있는 svg로 전환하십시오. – Dylan

관련 문제