0
が、私は次の属性を持つボタンとキャンバス持っている - ]ボタンをクリックするとFabricJS(FileReaderのを使用して)キャンバスにSVG
<button onclick="openSVG()">Open</button>
<canvas></canvas>
を、openSVG()
機能は
-
になっています
- ローカルハードドライブ(以前はFabricJSを使用して作成)からSVGファイルを選択して開きます。
- SVGファイルの内容をFileReaderで読み取って変数 に保存します今すぐ開く]ボタンをクリックする
fabric.loadSVGFromString()
方法
を使ってキャンバスを埋めるために、その変数を使用して
function openSVG() {
// importing file
var input = $(document.createElement('input'));
input.attr("id", "mySVGFile")
input.attr("type", "file");
input.trigger('click');
//storing file contents in var using FileReader
var myInputFile = document.getElementById('mySVGFile');
var myFile = myInputFile.files[0];
var fr = new FileReader();
fr.onload = function(){
var canvasD = this.result;
//loading data from var to canvas
fabric.loadSVGFromString(canvasD, function(objects, options) {
var obj = fabric.util.groupSVGElements(objects, options);
canvas.add(obj).renderAll();
});
};
fr.readAsText(myFile); }
私はFileReaderを使い慣れています。コンソールにエラーはないので、私がどこに間違っているのかを知ることさえできません。 私のアプローチは機能しませんか?私が望むものを達成するためのよりよい方法がありますか?
おかげで...
URL.createObjectURL()
方法を使用して、はるかに簡単かつより良いアプローチです。しかしそれは問題の半分を解決する。 個別に操作できるキャンバスにオブジェクトを描画する方法はありますか? たとえば、svgに円と四角形に関するデータが含まれていると仮定して、これらの図形を個別にサイズ変更してドラッグします。 – LVSAVAJEはい、可能です。それらをグループ化する代わりに別々に追加する必要があります。更新された回答を確認します。 –
SVGをCanvasに追加すると、パスとパスの配列として型が取得されます。パスではなくパスに応じてタイプ(オブジェクト)を「円」、「Rect」、「Line」などとすることは可能ですか?または円やRectなどのCanvas標準オブジェクトへのパスに変換することはできますか? –