爲了減少客戶端負載,我們正在嘗試在Node Express服務器上展開Paper.js層。我們有很多圖層來平整大量的圖像數據。而不是重寫我們的數據結構,我們想要結束包含柵格化(展平)圖層的新對象。Paper.js服務器端無法與接收層一起工作
所以我們有一個快速的路線,看起來像這樣:
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 is not a function
思考,也許我們並不需要擔心在服務器端激活層,我評論說出來,但得到了同樣的錯誤爲.rasterize
線。 (看到兩行註釋「Blows up」。)
我是否需要以某種方式將我們從客戶端接收的圖層導入到項目中?我試圖做到這一點與行:
paper.project.layers.push(pdf.pages[j].layer);
,但無濟於事。
如何修改此方法以成功處理服務器上的圖層?
爲什麼不嘗試使用'forEach'而不是重複? – brandonscript
@remus可能會使代碼更清潔,但您認爲它會解決手頭的問題嗎?如果是這樣如何? –
我懷疑使用迭代器var會導致一些容易被忽略的混淆代碼。通過清理並使用forEach,您至少可以簡化一些事情,以便更好地排除故障。 – brandonscript