나는 KineticJS 캔버스의 여러 레이어가 서로 위에 있습니다. 나는 이것을 PNG로 내보낼 수 있기를 원합니다. .toDataURL()
기능을 사용하여 각 레이어를 내보낼 수 있지만 모두 하나의 이미지로 만들고 싶습니다.base64 이미지 병합
모든 base64 문자열을 병합하는 방법이 있습니까? 서로의 상단에 각각의 이미지를 결합하여 최종 합성을 수출 - 당신은 SVG 4 층 SVG에게
나는 KineticJS 캔버스의 여러 레이어가 서로 위에 있습니다. 나는 이것을 PNG로 내보낼 수 있기를 원합니다. .toDataURL()
기능을 사용하여 각 레이어를 내보낼 수 있지만 모두 하나의 이미지로 만들고 싶습니다.base64 이미지 병합
모든 base64 문자열을 병합하는 방법이 있습니까? 서로의 상단에 각각의 이미지를 결합하여 최종 합성을 수출 - 당신은 SVG 4 층 SVG에게
@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,...">
를 포함 할 수
CORS 이미지에 대한 많은 정보를 찾을 수 없습니다. 이미지가 캔버스 내에서 사용되는 경우에만 필요합니까? 나는 캔버스 내에서 실제로 사용하지 않는다. 그래서 나는 괜찮은가? 또한 base64 문자열이 너무 길면 URL로 작동하지 않을 수 있습니까? 해야합니까? var image = window.open(); image.document.write ('');'. 두 옵션 모두 큰 문자열에 대해 걱정할 필요없이 지금은 정상적으로 작동합니다. 당신의 도움에 많은 감사드립니다. –
모든 캔버스 컨텐츠가 이미지없이 작성되면 잠재적 인 문제는 없습니다. CORS 및 이미지에 대한 자세한 내용은 "교차 도메인 보안"을 참조하십시오. 건배! – markE
올바른 생각을 가지고있다. 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);
}
});
});
시도해보십시오. https://jsfiddle.net/1hcrvc16/3/ –
하나의 캔버스에 모든 레이어를 그릴하는 것이 더 쉽습니다. 'drawImage (img, x, y)'는 첫 번째 인수로 캔버스 요소를 취할 수 있습니다. 단순히 각각의 캔버스를 (drawImage를 통해) 새로운 마스터 캔버스에 그리고 그 마스터 캔버스에서'.toDataURL()'을 호출하면됩니다. – apsillers
시도해보십시오. https://jsfiddle.net/1hcrvc16/3/ –