我需要一些關於將呈現的svg文字雲導出爲png的建議。svg導出爲png僅使用Angular導出JavaScript中呈現的小部分/部分渲染svg
我讓我的設置工作排序,但它只輸出一部分呈現的文字雲。
我認爲這可能與我需要設置的尺寸有關。我不確定。
這是我的角/ JavaScript的導出功能:
scope.exportToPNG2 = function() {
var svg = document.querySelector('#wordCloudSVG');
var canvas = document.getElementById('WordCloudCanvas');
var ctx = canvas.getContext('2d');
var data = (new XMLSerializer()).serializeToString(svg);
var DOMURL = window.URL || window.webkitURL || window;
var img = new Image();
var svgBlob = new Blob([data], { type: 'image/svg+xml;charset=utf-8' });
var url = DOMURL.createObjectURL(svgBlob);
img.onload = function() {
ctx.drawImage(img, 0, 0);
DOMURL.revokeObjectURL(url);
var imgURI = canvas
.toDataURL('image/png')
.replace('image/png', 'image/octet-stream');
triggerDownload(imgURI);
};
img.src = url;
}
function triggerDownload(imgURI) {
var evt = new MouseEvent('click', {
view: window,
bubbles: false,
cancelable: true
});
var a = document.createElement('a');
a.setAttribute('download', 'MY_COOL_IMAGE.png');
a.setAttribute('href', imgURI);
a.setAttribute('target', '_blank');
a.dispatchEvent(evt);
}
這是我的話,雲渲染到模板:
<div id="wordCloud">
<button class="basicButton" ng-click="exportToPNG2()">Export to .PNG</button>
<div id="wordCloudVisualisation"></div>
<canvas id="WordCloudCanvas"></canvas>
</div>
此圖片顯示了我<div>
哪裏我的文字雲被呈現給。黃色高亮塊,是被重新繪製爲PNG和導出的雲詞的部分:
在var svg = document.querySelector('#wordCloudSVG');
元素ID我從這個在我的Chrome瀏覽器開發工具有:
我必須改變導出整個詞雲?
感謝您的迴應!我能夠修復它,根據我的svg大小設置畫布的寬度和高度。 – onmyway
@onmyway,是的,我看到了。很高興你自己整理出來。但是請注意,你所做的並不完全一樣,因爲你的svg元素可能會有一些CSS規則可以讓getBoundingClientRect返回其他值(基本上你可以用你的方法得到顯示的大小)。由於我們正在談論一個布特矢量圖形,這兩個都是可以接受的,但你必須知道差異才能知道你想要哪一個。 – Kaiido
謝謝你的解釋:)。指出。 – onmyway