为了减少客户端负载,我们正在尝试在 Node Express 服务器上扁平化 Paper.js 层。我们有很多层要使用大量图像数据进行展平。而不是覆盖我们的数据结构,我们希望最终得到包含光栅化(扁平化)层的新对象。
所以我们有一个看起来像这样的 Express 路由:
app.post('/flatten', function (request, response) {
var pdfs = JSON.parse(request.body.pdfs);
// Attempt to set up canvas on the server side to work with
var canvas = new paper.Canvas(1000, 1000);
paper.setup(canvas);
paper.view.draw();
for (var i = 0; i < pdfs.length; i++) {
var pdf = pdfs[i];
if (pdf !== null) {
for (var j = 0; j < pdf.pages.length; j++) {
if (pdf.pages[j].layer !== undefined) {
paper.project.layers.push(pdf.pages[j].layer); // Attempt to add to current project; necessary?
pdf.pages[j].layer.activate(); // Blows up
pdf.pages[j].layer.visible = true;
var layerAsRaster = pdf.pages[j].layer.rasterize(); // Blows up
layerAsRaster.visible = false;
var dataString = layerAsRaster.toDataURL();
pdfs[i].pages[j].pageImageData = dataString.split(',')[1];
pdf.pages[j].layer.visible = false;
}
}
}
}
response.send(pdfs);
});
这.layer
是在客户端制作的原生 Paper.js 层。
当我们到达这条路线时,我们会收到这个错误:
TypeError: pdf.pages[j].layer.activate 不是函数
考虑到也许我们不需要担心在服务器端激活层,我将其注释掉,但该.rasterize
行得到了相同的错误。(参见注释为“Blows up”的两行。)
我是否需要以某种方式将从客户端收到的图层导入项目中?我试图用这条线做到这一点:
paper.project.layers.push(pdf.pages[j].layer);
但无济于事。
如何修改此方法以成功使用服务器端的图层?