canvas圆角图片?

刘梦婷            来源:优草派

Canvas作为HTML5标准中的一个重要元素,主要功能是实现2D图形绘制,也可以用来制作动态效果和实现图片处理。那么,在使用Canvas制作图片处理的时候,我们常会遇到一种需求:将图片的四个角变成圆角。本文将从多个角度分析如何使用Canvas来实现这一效果。

1. CSS实现圆角图片

canvas圆角图片?

在使用Canvas实现圆角效果之前,我们可以先了解一下CSS如何实现圆角图片。在CSS3中,可以通过border-radius属性来设置图片圆角的大小。例如:

```CSS

img{

border-radius: 50%;

}

```

这个属性的值可以是具体的像素值,也可以是百分比值。然而,这种方法有一个缺点,就是无法在图片上绘制其他内容。如果需要在图片上绘制文字或其他形状,就需要使用Canvas绘图。

2. Canvas实现圆角图片

在使用Canvas制作圆角图片时,我们需要使用到以下几个API:

- drawImage():绘制图片

- arc(): 绘制圆弧

- clip():剪切路径

首先,我们需要使用drawImage()方法来绘制原始图片:

```JavaScript

var canvas = document.getElementById('canvas');

var ctx = canvas.getContext('2d');

var img = new Image();

img.src = 'image.png';

img.onload = function () {

ctx.drawImage(img, 0, 0, 300, 200);

}

```

接下来,我们需要使用arc()方法来绘制圆角。假设我们要将四个角的圆角半径设置成20像素,那么可以这样绘制:

```JavaScript

var r = 20;

ctx.beginPath();

ctx.moveTo(r, 0);

ctx.lineTo(canvas.width - r, 0);

ctx.arc(canvas.width - r, r, r, Math.PI * 1.5, 0);

ctx.lineTo(canvas.width, canvas.height - r);

ctx.arc(canvas.width - r, canvas.height - r, r, 0, Math.PI * 0.5);

ctx.lineTo(r, canvas.height);

ctx.arc(r, canvas.height - r, r, Math.PI * 0.5, Math.PI);

ctx.lineTo(0, r);

ctx.arc(r, r, r, Math.PI, Math.PI * 1.5);

ctx.closePath();

```

上述代码中,首先使用beginPath()方法开启一个新的路径,然后通过moveTo()方法移动到左上角的位置,接着使用lineTo()方法绘制直线,最后使用arc()方法绘制圆弧。由于四个角的圆弧都是以30度为起点,因此需要分别设置起始角度和结束角度。

最后,我们需要使用clip()方法对路径进行剪切:

```JavaScript

ctx.clip();

```

此时,ctx就只会画出被路径包围的部分,也就是原始图片的四个角变成了圆角。

3. Canvas实现圆角边框图片

如果想要在图片的圆角上添加边框,可以同样使用Canvas来实现。以下代码演示了如何使用Canvas绘制圆角边框图片:

```JavaScript

var r = 20;

ctx.beginPath();

ctx.moveTo(r, 0);

ctx.lineTo(canvas.width - r, 0);

ctx.arc(canvas.width - r, r, r, Math.PI * 1.5, 0);

ctx.lineTo(canvas.width, canvas.height - r);

ctx.arc(canvas.width - r, canvas.height - r, r, 0, Math.PI * 0.5);

ctx.lineTo(r, canvas.height);

ctx.arc(r, canvas.height - r, r, Math.PI * 0.5, Math.PI);

ctx.lineTo(0, r);

ctx.arc(r, r, r, Math.PI, Math.PI * 1.5);

ctx.closePath();

ctx.strokeStyle = '#f00'; // 设置边框颜色

ctx.lineWidth = 5; // 设置边框宽度

ctx.stroke(); // 绘制边框

```

上述代码中,我们通过设置strokeStyle属性来设置边框的颜色,使用lineWidth属性来设置边框的宽度,最后使用stroke()方法来绘制边框。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行