如何在画布上绘制平滑的椭圆形

桑杰·纳卡特

我正在尝试在画布中使用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);

这是我的小提琴链接

您可以在这里看到此输出,在椭圆形的线边界不太清楚。 这是屏幕截图的输出

一个问题是显示屏的性质。

由于像素是矩形,并且您正在绘制曲线,因此当曲线尝试使其自身适合矩形空间时,结果将出现“锯齿”。

您可以使用错觉来欺骗眼睛,使其看到锯齿状的椭圆形。

光学技巧:

降低背景色和椭圆色之间的对比度。

这不是治愈方法……锯齿仍然存在。

但是眼睛识别的对比度较低,并且感觉椭圆形更平滑。

因此,如果您的设计适应这种样式变化,那么这种视觉上的错觉可能会有所帮助。

这是代码和小提琴:http : //jsfiddle.net/m1erickson/vDWR3/

var cx=180;
var cy=200;
var w=300;
var h=250;

// Start with a less-contrasting background
ctx.fillStyle="#ddd";
ctx.fillRect(0,0,canvas.width,canvas.height);

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.fillStyle="#555";
ctx.strokeStyle=ctx.fillStyle;
ctx.lineWidth=1.5;
ctx.stroke();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在画布上绘制平滑的椭圆形

来自分类常见问题

如何在图形对象上绘制填充的椭圆形?

来自分类Dev

如何在JFrame上绘制矩形和椭圆形

来自分类Dev

如何在JLabel中绘制椭圆形图像

来自分类Dev

如何在图像中的对象周围绘制椭圆形

来自分类Dev

如何在JLabel中绘制椭圆形图像

来自分类Dev

如何在乌龟图形(python)中绘制椭圆/椭圆形?

来自分类Dev

如何在乌龟图形(python)中绘制椭圆/椭圆形?

来自分类Dev

在圆的圆周上绘制点,但以椭圆形出现

来自分类Dev

Unity椭圆形绘制椭圆

来自分类Dev

opengl绘制椭圆形而不是圆形

来自分类Dev

Android:如何创建椭圆形的可绘制资源?

来自分类Dev

画布:arc(75,75,50,0,3.1415,true)绘制椭圆形而不是圆形

来自分类Dev

画布:arc(75,75,50,0,3.1415,true)绘制椭圆形而不是圆形

来自分类Dev

如何填充椭圆形?

来自分类Dev

如何在XAML中将图像裁剪为椭圆形

来自分类Dev

绘制褪色的透明椭圆形

来自分类Dev

在椭圆形周长中绘制对象

来自分类Dev

如何使中间的TextView变成椭圆形

来自分类Dev

如何使中间的TextView变成椭圆形

来自分类Dev

使用Java Swing将点绘制为椭圆形

来自分类Dev

在Python中绘制椭圆形轨道(使用numpy,matplotlib)

来自分类Dev

如何制作一个圆形的椭圆形按钮?

来自分类Dev

如何在Android中平滑画布绘制?

来自分类Dev

如何在css中制作一个椭圆形?

来自分类Dev

如何在Android中使用按钮创建半椭圆形页脚

来自分类Dev

如何在WPF按钮中获取按钮边框和椭圆形的一半?

来自分类Dev

如何在android中的水平Linearlayout中显示两个椭圆形末端的Textview?

来自分类Dev

如何在不旋转图像CSS的情况下以椭圆形式旋转图像

Related 相关文章

  1. 1

    如何在画布上绘制平滑的椭圆形

  2. 2

    如何在图形对象上绘制填充的椭圆形?

  3. 3

    如何在JFrame上绘制矩形和椭圆形

  4. 4

    如何在JLabel中绘制椭圆形图像

  5. 5

    如何在图像中的对象周围绘制椭圆形

  6. 6

    如何在JLabel中绘制椭圆形图像

  7. 7

    如何在乌龟图形(python)中绘制椭圆/椭圆形?

  8. 8

    如何在乌龟图形(python)中绘制椭圆/椭圆形?

  9. 9

    在圆的圆周上绘制点,但以椭圆形出现

  10. 10

    Unity椭圆形绘制椭圆

  11. 11

    opengl绘制椭圆形而不是圆形

  12. 12

    Android:如何创建椭圆形的可绘制资源?

  13. 13

    画布:arc(75,75,50,0,3.1415,true)绘制椭圆形而不是圆形

  14. 14

    画布:arc(75,75,50,0,3.1415,true)绘制椭圆形而不是圆形

  15. 15

    如何填充椭圆形?

  16. 16

    如何在XAML中将图像裁剪为椭圆形

  17. 17

    绘制褪色的透明椭圆形

  18. 18

    在椭圆形周长中绘制对象

  19. 19

    如何使中间的TextView变成椭圆形

  20. 20

    如何使中间的TextView变成椭圆形

  21. 21

    使用Java Swing将点绘制为椭圆形

  22. 22

    在Python中绘制椭圆形轨道(使用numpy,matplotlib)

  23. 23

    如何制作一个圆形的椭圆形按钮?

  24. 24

    如何在Android中平滑画布绘制?

  25. 25

    如何在css中制作一个椭圆形?

  26. 26

    如何在Android中使用按钮创建半椭圆形页脚

  27. 27

    如何在WPF按钮中获取按钮边框和椭圆形的一半?

  28. 28

    如何在android中的水平Linearlayout中显示两个椭圆形末端的Textview?

  29. 29

    如何在不旋转图像CSS的情况下以椭圆形式旋转图像

热门标签

归档