1

クライアント側の負荷を軽減するために、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」とコメントされている 2 行を参照してください。)

クライアントから受け取ったレイヤーを何らかの方法でプロジェクトにインポートする必要がありますか? 私は次の行でそれをやろうとします:

paper.project.layers.push(pdf.pages[j].layer);

しかし、役に立たない。

このメソッドを変更して、サーバー側のレイヤーを正常に処理するにはどうすればよいですか?

4

1 に答える 1