我有幾層KineticJS畫布,它們都在彼此之上。我希望能夠將這些導出爲PNG格式。我可以使用.toDataURL()
函數導出每個圖層,但我希望將它們全部作爲一個圖像。合併base64圖像
有沒有辦法合併所有的base64字符串?
我有幾層KineticJS畫布,它們都在彼此之上。我希望能夠將這些導出爲PNG格式。我可以使用.toDataURL()
函數導出每個圖層,但我希望將它們全部作爲一個圖像。合併base64圖像
有沒有辦法合併所有的base64字符串?
@apsillers有正確的想法 - 在彼此頂部結合每個圖像並導出最終複合。
KineticJS具有快捷方式導出所有層合併:stage.toDataURL().
stage.toDataURL
將其所有層的組合導出到dataUrl。
警告:與所有畫布圖像導出一樣,您必須確保所有圖像均符合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);
}
});
});
找不到關於CORS圖片的很多信息。這隻在圖像在畫布內使用時才需要?我實際上沒有在畫布中使用任何內容,所以我沒事吧?另外,如果base64字符串太長,可能無法用作URL?我應該'var image = window.open(); image.document.write('');'。這兩個選項現在工作正常,只是擔心大字符串。非常感謝您的幫助。 –
如果所有畫布內容都是在沒有圖像的情況下創建的,則不存在潛在問題。但如果您想了解更多關於CORS和圖像的信息,請參閱「跨域安全性」。乾杯! – markE
可以使含
<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,...">
SVG將是4層SVG
試試這個,https://jsfiddle.net/1hcrvc16/3/ –
它會更容易將所有圖層繪製到一個單一的畫布上。 'drawImage(img,x,y)'可以將一個畫布元素作爲其第一個參數。只需將每個畫布(通過'drawImage')繪製到新的主畫布上,然後在該主畫布上調用'.toDataURL()'。 – apsillers
試試這個,https://jsfiddle.net/1hcrvc16/3/ –