效果图:

思路:

  1. 先绘制一个圆角长方形
  2. 在画布中裁剪下来
  3. 在圆角长方形内绘制图片
  4. 图片四个角超出圆角长方形的区域被隐藏

具体代码:

<!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中食用,需要改动一下:

  1. 将img.onload换成Taro.getImageInfo
  2. 在getImageInfo的success回调中调用绘制图片的方法handleDraw
     
 

Canvas绘制圆角图片的更多相关文章

  1. canvas绘制圆角头像

    如果你想绘制的网页包含一个圆弧形的头像的canvas图片,但是头像本身是正方形的,需要的方法如下:首先, 拿到头像在画布上的坐标和宽高:(具体怎么获取不在此做具体介绍) 使用canvas绘制圆弧动画 ...

  2. [HTML5] Canvas绘制简单图片

    获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象的onload方法,调用context对象的drawImage()方法,参数:Image对象,x坐标, ...

  3. canvas 绘制圆角矩形

    <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...

  4. 实现鼠标拖动canvas绘制的图片

    不啰嗦上代码: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  5. canvas实现圆角图片 (处理原图是长方形或正方形)

    /** * 生成图片的缩略图 * @param {[type]} img 图片(img)对象或地址 * @param {[type]} width 缩略图宽 * @param {[type]} hei ...

  6. Unity3d《Shader篇》绘制圆角图片

    Pass { CGPROGRAM // Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a s ...

  7. android绘制圆形图片的两种方式

    看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap ...

  8. Android 圆形/圆角图片的方法

    Android 圆形/圆角图片的方法 眼下网上有非常多圆角图片的实例,Github上也有一些成熟的项目.之前做项目,为了稳定高效都是选用Github上的项目直接用.但这样的结束也是Android开发必 ...

  9. html5新特性canvas绘制图像

    在前端页面开发过程中偶尔会有需要对数据进行相应的数学模型展示,或者地理位置的动态展示,可能就会想到用canvas,网上有很多已经集成好的,比如说类似echarts,确实功能非常强大,而且用到了canv ...

  10. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

随机推荐

  1. 让AnaTraf成为您网络流量分析的最佳利器

    在快速发展的数字时代,企业对网络性能的监测与分析需求愈加旺盛.作为网络性能监测与诊断(NPMD)领域的佼佼者,AnaTraf网络流量分析仪凭借其出色的性能和易用性,正成为网络管理人员的首选工具. An ...

  2. OpenStack Centos7 T版本搭建

    目录 Centos7搭建OpenStack T版本 --上 1. 环境准备(所有节点操作) 1.1 修改主机名 1.2 关闭selinux 以及防火墙 1.3 修改hosts 1.4 配置时间同步 c ...

  3. Istio(八):istio安全之认证,启用mTLS

    目录 一.模块概览 二.系统环境 三.istio认证 3.1 证书创建与轮换 3.2 对等认证和请求认证 3.2.1 对等认证 3.2.2 请求认证 3.3 mTLS 3.3.1 双向 TLS 3.3 ...

  4. .net版OCR紧随PP-OCRv3重磅发布

    .net版OCR地址PaddleOCRSharp PaddleOCRSharp是一个基于PaddleOCR的C++代码修改并封装的.NET的工具类库.包含文本识别.文本检测.基于文本检测结果的统计分析 ...

  5. foxy rviz2 "rviz_common/Time"报错问题

    报错内容 The class required for this panel, 'rviz_common/Time', could not be loaded. Error: According to ...

  6. NOIP模拟101(多校33)

    T1 ladice 解题思路 我们把一个物品看做 \(A_i\) 与 \(B_i\) 之间的连边. 那么如果加入这条边之后联通块中有超过两个环或者两个环就是不合法的,也就是合法的状态只能是一个基环树和 ...

  7. Python爬虫 | 批量爬取今日头条街拍美图

    01 前言 上篇文章我们爬取了今日头条街拍美图,心情相当愉悦,今天这篇文章我们使用Selenium来爬取当当网的畅销图书排行.正所谓书中自有黄金屋,书中自有颜如玉,我们通过读书学习来提高自身的才华,自 ...

  8. uniapp 输入有值后按钮变色

    我们在开发中难免会遇到一些登录注册输入框中的值为空时,按钮的状态变成为不可点击的状态,当输入框有值后就把按钮变为可点击的状态 代码部分: <input placeholder="请输入 ...

  9. react跨组件通信

    在react没有类似vue中的事件总线来解决这个问题,一是我们借助它们共同的父级组件通过代理的方式来实现,但过程会相当繁锁.react提供了Context来实现跨组件通信, 而不必显式地通过组件树的逐 ...

  10. NSSCTF——crypto

    [鹤城杯 2021]easy_crypto [强网拟态 2021]拟态签到题 [SWPUCTF 2021 新生赛]crypto8[SWPUCTF 2021 新生赛]crypto7[SWPUCTF 20 ...