0
我使用Raphael創建了一個SVG,我想要捕捉並轉換爲PNG,然後在打開的窗口中顯示。我看了一些其他堆棧溢出回答like this one。我實施了ollieg對這個問題的回答。下面是我在做什麼的例子:將Raphael canvas內部div轉換爲PNG
<html>
<head>
<script src="NBA_test/lib/raphael-min.js"></script>
</head>
<body>
<div id="canvas"></div><br>
<script language="JavaScript">
var test=Raphael("canvas",50,50);
var rect=test.rect(0,0,50,50);
rect.attr({fill: '#fff000'})
window.onload = function() {
var canvas = document.getElementById("canvas");
window.location = canvas.toDataURL("image/png");
}
</script>
</body>
</html>
這應該畫一個黃色的矩形,並輸出爲PNG。控制檯確認SVG在畫布變量中正確捕獲。但是,toDataURL行會拋出一個錯誤:「TypeError:'null'不是一個對象(評估'canvas.toDataURL')」我知道我的示例有點不同,因爲我沒有實際的canvas標記我的HTML,只是將獲得畫布的div。但是,鑑於畫布被正確捕捉,我不明白爲什麼第二行會拋出錯誤。
toDataUrl僅適用於html5 canvas元素,它不會以這種方式爲Raphael嘗試這裏提供的建議http://stackoverflow.com/questions/3975499/convert-svg-to-image-jpeg-png-etc在瀏覽器中 – Loktar
你是說這個問題的第一個答案嗎?那個答案的第2步正是我在這裏所做的。依然似乎依靠toDataURL。我不清楚在這種情況下我將如何使用canvg。 – AustinC
是的,他們使用[此庫](https://code.google.com/p/canvg/)將svg渲染爲canvas,然後*然後*調用'toDataUrl'。所以基本上你必須首先轉換你的svg,把它繪製到canvas元素上,然後調用'toDataUrl'。 – Loktar