效果图:

 CanvasContext 是旧版的接口,不维护了, 新版 Canvas 2D 接口与 Web 一致

官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arc.html

直接上代码, 我懂:

<!--pages/test/testYZ/testYZ.wxml-->

    <text>输入公司名称:</text>
<input type="text" placeholder="请输入公司名称" bindinput="bindInputCompany" value="{{company}}" /> <text>章下面文字:</text>
<input type="text" placeholder="章下面的文字" bindinput="bindKeyInput2" value="{{name}}" /> <canvas type="2d" id="circleBar" style="width: 400rpx;height:400rpx;background: pink;margin: 30rpx auto;"></canvas>
<button type="primary" bindtap="comCreateSeal">生成公章</button>
Page({
data: {
company: "江苏大熊科技有限公司",
name: "专用章"
},
onShow(){
this.comCreateSeal()
},
// 请输入公司名
bindInputCompany(e) {
this.setData({
company: e.detail.value.trim()
})
},
// 请输入章下面的文字
bindInputName(e) {
this.setData({
name: e.detail.value.trim()
})
}, // 生成公章
comCreateSeal(){
const opts = {
company: this.data.company, // 机构名称
companyTight: false, // 公司名称是否紧凑(//false 散开型 true紧凑)
name: this.data.name
}
this.createSelectorQuery()
.select('#circleBar')
.fields({
node: true,
size: true,
}).exec((res) => {
console.log(res)
const canvas = res[0].node;
const context = canvas.getContext('2d');
context.fillStyle = 'rgba(255, 255, 255, 0)'; // 绘制印章边框
canvas.width = res[0].width
canvas.height = res[0].height
const width=canvas.width/2;
const height=canvas.height/2;
context.lineWidth=3;
context.strokeStyle="#f00";
context.beginPath();
context.arc(width,height,78,0,Math.PI*2);
context.stroke();
context.save(); //画五角星
context.save();
context.fillStyle="#f00";
context.translate(width,height);//移动坐标原点
context.rotate(Math.PI+0);//旋转
context.beginPath();//创建路径
var x = Math.sin(0);
var y= Math.cos(0);
var dig = Math.PI/5 *4;
for(var i = 0;i< 5;i++){//画五角星的五条边
var x = Math.sin(i*dig);
var y = Math.cos(i*dig);
context.lineTo(x*25,y*25);
}
context.closePath();
context.stroke();
context.fill();
context.restore(); // 绘制印章名称
context.font = '18px Helvetica';
context.textBaseline = 'middle';//设置文本的垂直对齐方式
context.textAlign = 'center'; //设置文本的水平对对齐方式
context.lineWidth=1;
context.fillStyle = '#f00';
context.fillText(opts.name,width,height+53); // 绘制印章单位
context.translate(width,height);// 平移到此位置,
var count = opts.company.length;// 字数
if (count > 14) {
var maxCount = 18;
context.font = '16px Helvetica'
if (opts.companyTight) {
var angle = 4*Math.PI/51;// 字间角度
} else {
var angle = 4*Math.PI/(3*(count - 1));// 字间角度
}
} else {
var maxCount = 14;
context.font = '20px Helvetica'
if (opts.companyTight) {
var angle = 4*Math.PI/39;// 字间角度
} else {
var angle = 4*Math.PI/(3*(count - 1));// 字间角度
}
}
var chars = opts.company.split("");
var c;
for (var i = 0; i < count; i++){
c = chars[i];// 需要绘制的字符
if(i==0) {
if (opts.companyTight) {
context.rotate(5*Math.PI/6 + angle*((maxCount-count)/2));
} else {
context.rotate(5*Math.PI/6);
}
} else {
context.rotate(angle);
}
context.save();
context.translate(64, 0);// 平移到此位置,此时字和x轴垂直
context.rotate(Math.PI/2);// 旋转90度,让字平行于x轴
context.fillText(c,0, 5);// 此点为字的中心点
context.restore();
}
})
}
});
/* pages/test/testYZ/testYZ.wxss */
text{
color: red
}
input{
height: 100rpx;
border: 2rpx solid #ccc;
font-size: 36rpx;
}

帅哥, 美女 点个赞呗~

最新文章

  1. Androide SQLiteDatabase数据库操作(转)
  2. 【A Global Line Matching Algorithm for 2D Laser Scan Matching in Regular Environment】
  3. angularjs之$timeout指令
  4. SQL Server 分页
  5. 后缀数组 POJ 3693 Maximum repetition substring
  6. Ubuntu16.04 操作
  7. C++标准库概述 [转]
  8. EXTJS 3.0 资料 控件之 combo 用法
  9. 容器的深入研究(二)—Set与Map
  10. winds引导配置数据文件包含的os项目无效
  11. 代码规范:idea上添加阿里巴巴Java开发插件
  12. MDK调试无法进入main()函数
  13. iOS项目之使用开关控制日志输出的功能
  14. Spring Boot Jpa 的使用
  15. 七、.net core下配置、数据库访问等操作实现
  16. 开源RabbitMQ操作组件
  17. BZOJ2662[BeiJing wc2012]冻结——分层图最短路
  18. C++指针二(易错模型)
  19. 第12月第26天 swift 下划线
  20. [WINDOWS MOBILE | SOLUTION] 通过有线连接到 PC 后,WM设备能 PING 通网关但是不能上网

热门文章

  1. [Python]-sklearn模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载数据集
  2. Django 使用Pycharm 创建工程
  3. Python 类型提示简介
  4. 查看pod对应的DNS域名
  5. 重学Java泛型
  6. PAT (Basic Level) Practice 1033 旧键盘打字 分数 20
  7. vue2双向绑定原理:深入响应式原理defineProperty、watcher、get、set
  8. Qt class 前置声明
  9. ASP.NET Core :缓存系列(四):内存缓存 MemoryCache
  10. 结构体struct知识