javascript - 如何在canvas中画出光滑的椭圆

标签 javascript css html canvas fabricjs

我正在尝试在我的 Canvas 中使用 ctx.clip 属性绘制一个平滑的椭圆形。我已经完成了绘图部分,我面临着椭圆弧线清晰度的问题。任何人对此有任何想法请告诉我? 这是我的代码。

<canvas id="c" width="400" height="400"></canvas>


var canvas = new fabric.Canvas('c');
var ctx = canvas.getContext('2d');
var cx=180;
var cy=200;
var w=300;
var h=250;
    // Quadratric curves example
    ctx.beginPath();
    var lx = cx - w/2,
        rx = cx + w/2,
        ty = cy - h/2,
        by = cy + h/2;
    var magic = 0.551784;
    var xmagic = magic*w/2;
    var ymagic = h*magic/2;
    ctx.moveTo(cx,ty);
    ctx.bezierCurveTo(cx+xmagic,ty,rx,cy-ymagic,rx,cy);
    ctx.bezierCurveTo(rx,cy+ymagic,cx+xmagic,by,cx,by);
    ctx.bezierCurveTo(cx-xmagic,by,lx,cy+ymagic,lx,cy);
    ctx.bezierCurveTo(lx,cy-ymagic,cx-xmagic,ty,cx,ty);

    ctx.fill();
    ctx.stroke();
    ctx.clip();



var text;
text = new fabric.Text('Honey', {
  fontSize: 50,
  left: 150,
  top: 150,
  lineHeight: 1,
  originX: 'left',
  fontFamily: 'Helvetica',
  fontWeight: 'bold'
});
canvas.add(text);

Here is my fiddle link

你可以在这里看到这个输出,椭圆的线条边界不太清楚。 Here is output of screen shot

最佳答案

试试这个对你有帮助 //脚本

var canvas = new fabric.Canvas('c');
 var w;
 var h;
 var ctx = canvas.getContext('2d');
 w=canvas.width / 4;
 h=canvas.height / 2.4;
canvas.clipTo = function(ctx) {
 ctx.save();
 ctx.scale(2, 1.2);
 ctx.arc(w, h, 90, 0, 2 * Math.PI, true);
 ctx.stroke();
 ctx.restore();
}

fiddle Demo

关于javascript - 如何在canvas中画出光滑的椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067584/

相关文章:

javascript - 使用 discord.js 在第一个 channel 发送消息

javascript - 如何在单击另一个 div 时使用 JS 或 JQuery 甚至 Bootstrap 隐藏一个 div?

html - 为什么可以设置样式和查看 html 标签?

javascript - 使用ajax插入失败

javascript - 如何从reactJS另一个模块中的文本字段访问值

Javascript 循环一个数组

javascript - 在 $.ajax 之后更新类数组

javascript - 在不改变原始 CSS 的情况下改变字体和图像大小

javascript - HTML5 : Detecting if you're on mobile or pc with javascript?

javascript - 将 Summernote 与 Meteor 结合使用(发现 Meteor)