如何使用Javascript创建带有漫画风格/手抖动的SVG /画布草图
我知道xkcd风格的JS绘图仪和这文章。请注意,我要求的不是情节,而是任何形式的素描,线条,形状,文字等等。
还有哪些使用JS的方法/技术?
编辑:在思考和阅读了一段时间之后,我决定实现自己的JS库,为SVG和HTML5画布提供卡通风格的绘图。它被称为comic.js,可以找到这里。
发布于 2014-12-05 19:06:59
我会使用画布库来做这件事,只是为了简单的处理形状。
我要找的是Paper.js和Fabric.js。但是,我将重点关注Paper.js,因为它是我工作过的那个。
,所以你有了形状,现在是什么?
maxDistance函数的参数flatten。position.x和position.y。如果这就是你的意思::

,,下面是代码:
//STEP 1 -- create shapes, a circle and rectangle in this example
var myCircle = new Path.Circle(new Point(100, 70), 50);
myCircle.strokeColor = 'white';
myCircle.strokeWidth = 2;
var mySquare = new Rectangle(new Point(350, 250), new Point(190, 100));
var square = new Path.Rectangle(mySquare);
square.strokeColor = 'white';
square.strokeWidth = 2;
//STEP 2 -- Subdivide the shapes into segments. Parameter here is the max distance we walk along-the-path before adding a new vertex
myCircle.flatten(5);
square.flatten(4);
//STEP 3 -- Loop through the segment points of the path and move each to a random value between 1 and 4
for (var i = 0; i < myCircle.segments.length; i++) { //loop for circle
myCircle.segments[i].point.x += getRandomInt(1,3);
myCircle.segments[i].point.y += getRandomInt(1,3);
};
for (var i = 0; i < square.segments.length; i++){ //loop for square
square.segments[i].point.x += getRandomInt(1,3);
square.segments[i].point.y += getRandomInt(1,3);
};
//draw the paper view
view.draw();
//Utility function that returns a random integer within a range
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},这是it的 jsFiddle
这个场景的问题是,画布上的每个“点”都是一个对象,而高数量的点/节点/顶点对于浏览器来说有点重。因此,如果您的设计很复杂,或者您希望用户与您的绘图进行交互,这可能是一个障碍(交互可能会被证明是缓慢的)。
或者,您可以使用普通的画布来完成此操作,而不需要任何库,但我不会这样做,因为我嗅到算法需要手动绘制形状,然后在这些算法中引入抖动。就计算时间而言,这可能要快得多,但实现起来会更困难,因为画布是一种低级的东西--它只记得绘制的像素,你需要滚动你自己的数据结构来记住形状,它们的位置等等。
https://stackoverflow.com/questions/27321215
复制相似问题