ファブリックキャンバスの描画結果をSVGファイルに出力する必要があります。fabric.js出力svgにアルファ色を含めるにはどうすればよいですか?
fabric.jsバージョン1.7.6を使用していて、rgba(255,0,0,.15)
のようなrgbaの塗りつぶしでキャンバスに描画されたパスがある場合、SVGの結果はrgb(0,0,0)
となります。アルファチャンネルを出力するために有効にする必要がある設定がありますか?
私のサンプルコードでは、紫色の円はSVGに正しく変換されますが、四角形は黒く表示されます。
サンプルHTML:
<html>
<head>
<script src="fabric.js"></script>
</head>
<body>
<div id="canvasHolder" style="border: 3px solid black;">
<canvas id="canvasElement" width="400" height="400" />
</div>
<div id="svgHolder" style="border: 3px solid blue;">
</div>
</body>
<script>
var canvas = new fabric.Canvas('canvasElement');
var rect = new fabric.Path('M,0,0,h,100,v,100,h,-100,z',{
top:100,
left:100,
stroke: 'green',
fill: 'rgba(255,0,0,.15)'
});
canvas.add(rect);
var circ = new fabric.Circle({
radius: 30,
top:30,
left:30,
stroke: 'blue',
fill: 'purple'
});
canvas.add(circ);
canvas.renderAll();
// Make an SVG object out of the fabric canvas
var SVG = canvas.toSVG();
document.getElementById('svgHolder').innerHTML = SVG;
</script>
</html>
出力SVG:私はコメントで言ったように
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400" height="400" viewBox="0 0 400 400" xml:space="preserve">
<desc>Created with Fabric.js 1.7.6</desc>
<defs>
</defs>
<path d="M 0 0 h 100 v 100 h -100 z" style="stroke: rgb(0,128,0); stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform="translate(150.5 150.5) translate(-50, -50) " stroke-linecap="round"></path>
</svg>
[プロジェクトの問題追跡ツール](https://github.com/kangax/fabric.js/issues/new)で報告する必要があるバグのようです。色はすべて 'rgb()'( 'hsl'、hex、keywords)に変換されるので、アルファチャンネルをサポートしていません... – Kaiido