我试图在服务器上(运行Node.js)绘制一个螺旋形的栅格示例(link)。但是,我遇到的问题是我的路径未显示在导出的框架上,并且只能看到下载的图像。但是,从我的 Angular 看,这可能是一个愚蠢的错误,但是几天浏览Google和文档并没有帮助我解决问题。

我做了什么:

  • 添加paper.前缀
  • 已将+/-更改为相应的add()subtract()
  • 尝试在图层内显示路径。

  • 这是我的代码:
    var paper = require('paper');
    var fs = require('fs');
    var drawer = {};
    
    var canvas = new paper.Canvas(1000, 1000);
    paper.setup(canvas);
    
    var layer = paper.project.activeLayer;
    
    drawer.drawSpiral = function(url, filename, fn) {
        var url = 'http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png';
        var raster = new paper.Raster(url);
    
        raster.onLoad = function() {
            raster.fitBounds(paper.view.bounds);
    
            var position = paper.view.center;
            var count = 0;
            var max = Math.min(raster.bounds.width, raster.bounds.height) * 0.5;
    
            var path = new paper.Path();
            path.fillColor = 'black';
            path.closed = true;
    
            while ((paper.view.center - position).length < max) {
                count++;
    
                var vector = new paper.Point(count * 5, count / 100);
                var rot = vector.rotate(90);
                var color = raster.getAverageColor(position.add(vector).divide(2));
                var value = color ? (1 - color.gray) * 3.7 : 0;
    
                rot.length = Math.max(value, 0.2);
                path.add(position.add(vector).subtract(rot));
                path.insert(0, position.add(vector).add(rot));
    
                position = position.add(vector);
            }
    
            path.smooth();
            layer.insertChild(0, path);
            layer.fitBounds(paper.view.bounds);
            drawer.exportPNG(filename, fn);
        };
    }
    
    drawer.exportPNG = function(filename, fn) {
        out = fs.createWriteStream(__dirname + '/static/img/' + filename + '.png');
        stream = canvas.pngStream();
    
        stream.on('data', function(chunk) {
            out.write(chunk);
        });
    
        stream.on('end', function() {
            fn();
        });
    }
    
    module.exports = drawer;
    

    显然是这样调用的:
    var drawer = require('./drawer.js');
    drawer.drawSpiral('','abc', function(){});
    

    最佳答案

    在这里对我有用。您需要使用系统中的镜像。拥有图片,然后使用它

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Spiral Raster</title>
        <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.18/paper-full.min.js"></script>
        <script type="text/paperscript" canvas="canvas">
            // Please note: dragging and dropping images only works for
            // certain browsers when serving this script online:
            var path, position, max;
            var count = 0;
            var grow = true;
            var raster = new Raster('mona');
            raster.remove();
    
            var text = new PointText(view.bounds.bottomRight - [30, 30]);
            text.justification = 'right';
            text.fontSize = 10;
            text.content = window.FileReader
                    ? 'drag & drop an image from your desktop to rasterize it'
                    : 'to drag & drop images, please use Webkit, Firefox, Chrome or IE 10';
    
            resetSpiral();
    
            function onFrame(event) {
                if (grow) {
                    if (raster && (view.center - position).length < max) {
                        for (var i = 0, l = count / 36 + 1; i < l; i++) {
                            growSpiral();
                        }
                        path.smooth();
                    } else {
                        grow = false;
                    }
                }
            }
    
            function growSpiral() {
                    count++;
                    var vector = new Point({
                        angle: count * 5,
                        length: count / 100
                    });
                    var rot = vector.rotate(90);
                    var color = raster.getAverageColor(position + vector / 2);
                    var value = color ? (color.gray) * 3.7 : 0;
                    rot.length = Math.max(value, 0.2);
                    path.add(position + vector - rot);
                    path.insert(0, position + vector + rot);
                    position += vector;
            }
    
            function resetSpiral() {
                grow = true;
    
                // Transform the raster, so it fills the view:
                raster.fitBounds(view.bounds);
    
                if (path)
                    path.remove();
    
                position = view.center;
                count = 0;
                path = new Path();
                path.fillColor = 'black';
                path.closed = true;
    
                position = view.center;
                max = Math.min(raster.bounds.width, raster.bounds.height) * 0.5;
            }
    
            function onResize() {
                text.remove();
                if (count > 0)
                    resetSpiral();
            }
    
            function onKeyDown(event) {
                if (event.key == 'space') {
                    path.selected = !path.selected;
                }
            }
    
            function onDocumentDrag(event) {
                event.preventDefault();
            }
    
            function onDocumentDrop(event) {
                event.preventDefault();
    
                var file = event.dataTransfer.files[0];
                var reader = new FileReader();
    
                reader.onload = function ( event ) {
                    var image = document.createElement('img');
                    image.onload = function () {
                        raster = new Raster(image);
                        raster.remove();
                        resetSpiral();
                    };
                    image.src = event.target.result;
                };
                reader.readAsDataURL(file);
            }
    
            DomEvent.add(document, {
                drop: onDocumentDrop,
                dragover: onDocumentDrag,
                dragleave: onDocumentDrag
            });
        </script>
      <style>
      body {
        margin: 0;
        overflow: hidden;
      }
      </style>
    </head>
    <body>
        <canvas id="canvas" resize style="background-color:white"></canvas>
        <img width="512" height="512" id="mona" style="display: none;" src="it_follows.jpg">
    </body>
    </html>
    

    关于javascript - 在服务器端实现Paper.js螺旋栅格示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27865732/

    10-13 03:07