2013-10-23 7 views
0

나는 KineticJS 캔버스의 여러 레이어가 서로 위에 있습니다. 나는 이것을 PNG로 내보낼 수 있기를 원합니다. .toDataURL() 기능을 사용하여 각 레이어를 내보낼 수 있지만 모두 하나의 이미지로 만들고 싶습니다.base64 이미지 병합

모든 base64 문자열을 병합하는 방법이 있습니까? 서로의 상단에 각각의 이미지를 결합하여 최종 합성을 수출 - 당신은 SVG 4 층 SVG에게

+0

하나의 캔버스에 모든 레이어를 그릴하는 것이 더 쉽습니다. 'drawImage (img, x, y)'는 첫 번째 인수로 캔버스 요소를 취할 수 있습니다. 단순히 각각의 캔버스를 (drawImage를 통해) 새로운 마스터 캔버스에 그리고 그 마스터 캔버스에서'.toDataURL()'을 호출하면됩니다. – apsillers

+0

시도해보십시오. https://jsfiddle.net/1hcrvc16/3/ –

답변

3

@apsillers 될 것

<image width="100" height="100" xlink:href="data:image1/png;base64,..."> 
<image width="100" height="100" xlink:href="data:image2/png;base64,..."> 
<image width="100" height="100" xlink:href="data:image3/png;base64,..."> 
<image width="100" height="100" xlink:href="data:image4/png;base64,..."> 

를 포함 할 수

+0

CORS 이미지에 대한 많은 정보를 찾을 수 없습니다. 이미지가 캔버스 내에서 사용되는 경우에만 필요합니까? 나는 캔버스 내에서 실제로 사용하지 않는다. 그래서 나는 괜찮은가? 또한 base64 문자열이 너무 길면 URL로 작동하지 않을 수 있습니까? 해야합니까? var image = window.open(); image.document.write ('');'. 두 옵션 모두 큰 문자열에 대해 걱정할 필요없이 지금은 정상적으로 작동합니다. 당신의 도움에 많은 감사드립니다. –

+1

모든 캔버스 컨텐츠가 이미지없이 작성되면 잠재적 인 문제는 없습니다. CORS 및 이미지에 대한 자세한 내용은 "교차 도메인 보안"을 참조하십시오. 건배! – markE

1

올바른 생각을 가지고있다. stage.toDataURL().

stage.toDataURL이 dataUrl에 모든 층의 조합을 보냅니다 :

KineticJS 결합 모든 레이어를 수출 할 수있는 바로 가기가 있습니다.

경고 : 모든 캔버스 이미지 내보내기와 마찬가지로 모든 이미지가 CORS 규격인지 확인해야합니다.

다음은 예제 코드입니다 :

var stage = new Kinetic.Stage({ 
    container: 'container', 
    width: 400, 
    height: 400 
}); 
var layer1 = new Kinetic.Layer(); 
stage.add(layer1); 
var layer2 = new Kinetic.Layer(); 
stage.add(layer2); 


var img1=new Image(); 
img1.onload = function() { 
    var image1 = new Kinetic.Image({ 
     x: 0, 
     y: 0, 
     image: img1, 
     width: 100, 
     height: 100 
    }); 
    layer1.add(image1); 
    layer1.draw(); 
} 
img1.src="yourCORScompliantImage1.png"; 

var img2=new Image(); 
img2.onload = function() { 
    var image2 = new Kinetic.Image({ 
     x: 0, 
     y: 0, 
     image: img2, 
     width: 100, 
     height: 100 
    }); 
    layer2.add(image2); 
    layer2.draw(); 
} 
img2.src="yourCORScompliantImage2.png"; 

$("#export").click(function(){ 
     stage.toDataURL({ 
      callback: function(dataUrl) { 
       window.open(dataUrl); 
      } 
     }); 
}); 
+0

시도해보십시오. https://jsfiddle.net/1hcrvc16/3/ –