效果图:

 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;
}

帅哥, 美女 点个赞呗~

小程序canvas2D绘制印章,话不多说,直接上代码的更多相关文章

  1. 微信小程序-canvas绘制文字实现自动换行

    在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...

  2. 小程序canvas绘制纯色圆角区域 setdata数组某一项

    小程序canvas绘制纯色圆角区域: //方法: roundRectPath:function(ctx, x, y, w, h, r) { ctx.beginPath(); ctx.moveTo(x ...

  3. 在微信小程序中绘制图表(part2)

    本期大纲 1.确定纵坐标的范围并绘制 2.根据真实数据绘制折线 相关阅读:在微信小程序中绘制图表(part1)在微信小程序中绘制图表(part3) 关注我的 github 项目 查看完整代码. 确定纵 ...

  4. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  5. 小程序canvas绘制渐变色(简单入门)

    呀,曾经的我是那么的单纯,天真,粗略的翻了一遍小程序画布API,没有看见渐变色,就以为不支持渐变色 于是在项目中直接把原本的渐变色换成了单一颜色展示,发现很low啊 但是,自从上次小程序API文档更新 ...

  6. 小程序canvas绘制base64数据格式图片

    翻了微信小程序官方文档,看了看画板drawImage的用法,官方对所要绘制的图片资源路径并没有很详细,模棱两可,没说支持什么格式的路径.今天我就试一下支不支持base64格式的图片 随便找张图片从网上 ...

  7. 微信小程序开放公测了 晚上又可以通宵搞代码了

    就在刚刚22:15分,微信公众平台的服务号发来好消息说小程序开放公测了,喜大普奔啊!!!码农们晚上又可以通宵搞测试了.之前还猜测16日微信小论坛小程序专场上会公布,没想到提前了那么多天,效率挺高的,而 ...

  8. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  9. 小程序组件化框架 WePY 在性能调优上做出的探究

    作者:龚澄 导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中.因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用.因此必须另开辟蹊径找出适合小程序的调估方式. 本文 ...

  10. 微信小程序之商品发布+编辑功能(多图片上传功能)

    小程序的商品发布页面:功能有多图片上传 遇到的问题记录一下:1.uploadFile成功之后返回的参数是json字符串,一定要用JSON.parse转换为object格式 2.因为商品发布和编辑都是在 ...

随机推荐

  1. docker容器资源限制:限制容器对内存/CPU的访问

    目录 一.系统环境 二.前言 三.docker对于CPU和内存的限制 3.1 限制容器对内存的访问 3.2 限制容器对CPU的访问 一.系统环境 服务器版本 docker软件版本 CPU架构 Cent ...

  2. Unity接入微信支付SDK 2022年版安卓篇

    最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...

  3. 事件循环:微任务和宏任务在v8中实现的简单理解

    微任务 在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_mic ...

  4. 创建Elasticsearch集群并为它们配置TLS安全通信

    文章转载自:https://elasticstack.blog.csdn.net/article/details/105636302 文章开头讲述的是两台es主机构建一个集群,其中有关的配置可以借鉴 ...

  5. 使用kuboard界面管理k8s集群时使用ConfigMap挂载挂载到pod容器中,映射成一个文件夹

    将 ConfigMap 作为一个数据卷(在挂载时不指定数据卷内子路径,需要指定ConfigMap的子路径)挂载到容器,此时 ConfigMap 将映射成一个文件夹,每一个 KEY 是文件夹下的文件名, ...

  6. 官方文档采用Docker方式安装

    官方文档地址:https://github.com/grafana/loki/tree/master/production The Docker images for Loki and Promtai ...

  7. JavaScript 的闭包(closure)

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/ 对于闭包的理解,其实可以归纳为,在创建函数时,同时创建了一 ...

  8. Centos7下的基本操作

    本系统是在centos7下最小化安装的 文件操作相关 创建文件夹mkdir name //创建一个文件夹 创建文本touch test.txt //创建文本 删除文件夹rm -rf 文件名 //删除文 ...

  9. LeetCode - 二维数组及滚动数组

    1. 二维数组及滚动数组总结 在二维数组num[i][j]中,每个元素都是一个数组.有时候,二维数组中的某些元素在整个运算过程中都需要用到:但是有的时候我们只需要用到前一个或者两个数组,此时我们便可以 ...

  10. Ubuntu转到root用户后用户名路径没有颜色

    看到好多都直接把普通会用户的.bashrc配置复制到root家目录下,由于本人小白,很多.bashrc配置看不懂,也不敢随便修改.于是找到别的配置方法. 普通用户的os@a:~$和root用户的roo ...