使用 FileReader 将 JSON blob 导入到 canvas
Import JSON blob to canvas using FileReader
我正在尝试允许 fabricjs 从我导出的 .JSON 文件中导入一个 JSON blob 字符串,该文件允许将字符串加载到 canvas 中并放置。这是为了当用户可能希望通过将 JSON blob 以 .JSON 格式导出到他们的下载并将他们的 canvas 作品导出到另一台计算机并导入到另一台计算机以便稍后继续.
我已经能够弄清楚如何使用这里的代码导出 JSON blob:
function exportFile(textData, filename) {
var filesaver = require('filesaver.js');
var content = new Blob([textData], {type: "application/json"});
filesaver.saveAs(content, filename);
}
这允许我使用 filesaver 编写包含所有对象的 JSON blob 文件,但我不确定如何将 JSON blob 文件导入回来。
这是我使用 FileReader 实现它并将 JSON blob 数据导入回 canvas 的糟糕尝试,以大致展示我是如何尝试使其工作的。这可能是一个非常简单的修复,但我真的很困惑。
$("#import-file-button").on("change", function(e) {
page.closePanel(null, true);
// under maintainance
var files = e.target.files;
var reader = new FileReader();
reader.onload = function(e) {
var contents = reader.result;
};
var readData = reader.readAsText(blob);
canvas.clear();
canvas.loadFromJSON(readData, function() {
canvas.renderAll();
});
utils.centerContent();
reader.readAsArrayBuffer(files[0]);
});
$("#import-file-button").on("change", function(e) {
page.closePanel(null, true);
// under maintainance
var files = e.target.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var contents = reader.result;
canvas.loadFromJSON(JSON.parse(contents), function() {
canvas.renderAll();
});
utils.centerContent();
};
reader.readAsText(files);
});
您需要使用 readAsText
读取 blob,并在 onload 回调中将该结果添加到 canvas。确保 reader.result
是 JSON.
我正在尝试允许 fabricjs 从我导出的 .JSON 文件中导入一个 JSON blob 字符串,该文件允许将字符串加载到 canvas 中并放置。这是为了当用户可能希望通过将 JSON blob 以 .JSON 格式导出到他们的下载并将他们的 canvas 作品导出到另一台计算机并导入到另一台计算机以便稍后继续.
我已经能够弄清楚如何使用这里的代码导出 JSON blob:
function exportFile(textData, filename) {
var filesaver = require('filesaver.js');
var content = new Blob([textData], {type: "application/json"});
filesaver.saveAs(content, filename);
}
这允许我使用 filesaver 编写包含所有对象的 JSON blob 文件,但我不确定如何将 JSON blob 文件导入回来。
这是我使用 FileReader 实现它并将 JSON blob 数据导入回 canvas 的糟糕尝试,以大致展示我是如何尝试使其工作的。这可能是一个非常简单的修复,但我真的很困惑。
$("#import-file-button").on("change", function(e) {
page.closePanel(null, true);
// under maintainance
var files = e.target.files;
var reader = new FileReader();
reader.onload = function(e) {
var contents = reader.result;
};
var readData = reader.readAsText(blob);
canvas.clear();
canvas.loadFromJSON(readData, function() {
canvas.renderAll();
});
utils.centerContent();
reader.readAsArrayBuffer(files[0]);
});
$("#import-file-button").on("change", function(e) {
page.closePanel(null, true);
// under maintainance
var files = e.target.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var contents = reader.result;
canvas.loadFromJSON(JSON.parse(contents), function() {
canvas.renderAll();
});
utils.centerContent();
};
reader.readAsText(files);
});
您需要使用 readAsText
读取 blob,并在 onload 回调中将该结果添加到 canvas。确保 reader.result
是 JSON.