Canvas绘制圆角图片
效果图:

思路:
- 先绘制一个圆角长方形
- 在画布中裁剪下来
- 在圆角长方形内绘制图片
- 图片四个角超出圆角长方形的区域被隐藏
具体代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Canvas绘制时钟</title>
<style>
.wrapper {
display: flex;
justify-content: center;
align-items: center;
height: 800px;
}
.left {
margin-right: 100px;
}
#canvas {
border: 1px solid #ccc;
}
#img {
width: 270px;
height: 300px;
margin-right: 60px;
border: 2px solid #ccc;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="left">
<p>原图 270 * 300</p>
<img id="img" src="./3.jpeg" />
</div>
<div class="right">
<p>canvas 300 * 400</p>
<p>图片 200 * 300</p>
<canvas id="canvas" width="300" height="400"></canvas>
</div>
</div>
<script>
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d'); let img = document.getElementById('img');
img.onload = function () {
handleDraw();
}; handleDraw = () => {
handleBorderRect(ctx, 10, 10, 200, 300, 14, '#ccc');
ctx.clip();
ctx.drawImage(img, 10, 10, 200, 300);
}; handleBorderRect = (ctx, x, y, w, h, r, color) => {
ctx.beginPath();
// 左上角
ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
ctx.moveTo(x + r, y);
ctx.lineTo(x + w - r, y);
ctx.lineTo(x + w, y + r);
// 右上角
ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
ctx.lineTo(x + w, y + h - r);
ctx.lineTo(x + w - r, y + h);
// 右下角
ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
ctx.lineTo(x + r, y + h);
ctx.lineTo(x, y + h - r);
// 左下角
ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
ctx.lineTo(x, y + r);
ctx.lineTo(x + r, y); ctx.fillStyle = color;
ctx.fill();
ctx.closePath();
};
</script>
</body>
</html>
如果在Taro中食用,需要改动一下:
- 将img.onload换成Taro.getImageInfo
- 在getImageInfo的success回调中调用绘制图片的方法handleDraw
Canvas绘制圆角图片的更多相关文章
- canvas绘制圆角头像
如果你想绘制的网页包含一个圆弧形的头像的canvas图片,但是头像本身是正方形的,需要的方法如下:首先, 拿到头像在画布上的坐标和宽高:(具体怎么获取不在此做具体介绍) 使用canvas绘制圆弧动画 ...
- [HTML5] Canvas绘制简单图片
获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象的onload方法,调用context对象的drawImage()方法,参数:Image对象,x坐标, ...
- canvas 绘制圆角矩形
<!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...
- 实现鼠标拖动canvas绘制的图片
不啰嗦上代码: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...
- canvas实现圆角图片 (处理原图是长方形或正方形)
/** * 生成图片的缩略图 * @param {[type]} img 图片(img)对象或地址 * @param {[type]} width 缩略图宽 * @param {[type]} hei ...
- Unity3d《Shader篇》绘制圆角图片
Pass { CGPROGRAM // Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a s ...
- android绘制圆形图片的两种方式
看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap ...
- Android 圆形/圆角图片的方法
Android 圆形/圆角图片的方法 眼下网上有非常多圆角图片的实例,Github上也有一些成熟的项目.之前做项目,为了稳定高效都是选用Github上的项目直接用.但这样的结束也是Android开发必 ...
- html5新特性canvas绘制图像
在前端页面开发过程中偶尔会有需要对数据进行相应的数学模型展示,或者地理位置的动态展示,可能就会想到用canvas,网上有很多已经集成好的,比如说类似echarts,确实功能非常强大,而且用到了canv ...
- 使用html5 canvas绘制图片
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
随机推荐
- docker-compose 安装LNMP
安装DNMP https://github.com/yeszao/dnmp.git https://blog.csdn.net/weixin_34038293/article/details/9427 ...
- gorm使用小结
增 db.Create(user) db.Save(user) 参数只能用**结构体指针****,因为要根据指针写入该条插入的数据, 所以user可以作为该条数据使用. 新增只能用结构体 save方法 ...
- java stream数据分组 stream().collect(groupingBy
List<Map<String, Object>> foreList = forecastDataDao.getcityforeresults(param); Map<S ...
- 热烈祝贺 Splashtop 赢得最佳远程桌面用户满意度得分
在 G2 的 2021 年冬季远程桌面网格报告中,Splashtop 的净发起人得分(NPS)为 93,是所有远程桌面工具中最高的. 在一份分析用户对 30 多种远程桌面解决方案的评论的报告中,Spl ...
- 基于webapi的websocket聊天室(二)
上一篇 - 基于webapi的websocket聊天室(一) 消息超传缓冲区的问题 在上一篇中我们定义了一个聊天室WebSocketChatRoom.但是每个游客只分配了400个字节的发言缓冲区,大概 ...
- npm install current-device js 端判断程序运行的设备
https://github.com/matthewhudson/current-device CURRENT-DEVICE This module makes it easy to w ...
- C#笔记(1)窗体
1. 隐藏TabPage 在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).设置该TabPage的父容器为null 即可,如TabPage.Parent = null .如 ...
- Java异常中throw 与throws的区别
throw 与 throws区别 在Java中,throws和throw是两个不同的关键字,它们在异常处理中起着不同的作用. throws关键字: throws用于声明一个方法可能会抛出的异常.当一个 ...
- 使用nvm安装以及管理多版本node教程
安装nvm.node.npm 下载nvm安装包,推荐使用1.1.7,我个人使用1.1.8会有中文乱码的报错 点击exe文件,注意修改nvm的安装根目录以及node的安装根目录,后者是以后管理多版本no ...
- 在AngularJS中,控制器没有生命周期方法
在AngularJS中,控制器没有生命周期方法,但是$scope对象有一些事件,可以模拟生命周期方法的行为.例如,$scope.$on('$destroy', function() {...})可以在 ...