首页 > 编程语言 >小程序canvas2D绘制印章,话不多说,直接上代码

小程序canvas2D绘制印章,话不多说,直接上代码

时间:2022-11-22 15:58:43浏览次数:62  
标签:canvas2D height width 印章 context var PI 绘制 Math

效果图:

 

 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,height,width,印章,context,var,PI,绘制,Math
From: https://www.cnblogs.com/520BigBear/p/16915341.html

相关文章

  • canvas绘制圆角矩形
     canvas绘制圆角矩形Canvas并没有提供绘制圆角矩形的方法,但是通过观察,我们可以发现,其实我们可以将圆角矩形分为四段,可以通过使用arcTo来实现我们假设起点为x,y.绘......
  • 学习使用d3.arc()绘制图形
    d3.arc()是一个弧度生成器,该生成器在被调用时会返回一个字符串,可以赋值给path元素的d属性,用于生成圆弧、圆形和环形。其中0弧度位于12点钟方向,正弧度沿着顺时针方向设......
  • 1.使用matplotlib绘制折线图
    importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False#用来正常显示负号in......
  • 在Vue中使用Canvas绘制动态背景
    好家伙, 发现了,在created(){}钩子函数中使用canvas画布貌似是错误的行为 vue中canvas的使用-掘金(juejin.cn) 于是我们琢磨一下 找到cancas元素;创建cont......
  • python语言绘图:绘制贝叶斯方法中最大后验密度(Highest Posterior Density, HPD)区间图的
    代码源自:https://github.com/PacktPublishing/Bayesian-Analysis-with-Python  内容接前文:​​python语言绘图:绘制贝叶斯方法中最大后验密度(HighestPosteriorDensity,......
  • mongodb绘制多边形区域
    拾取坐标地址:http://api.map.baidu.com/lbsapi/getpoint/index.html根据坐标绘制多边形区域:https://developer.baidu.com/map/jsdemo.htm#c2_9将以下的代码复制在打开的......
  • Python绘制精美可视化数据分析图表(一)-Matplotlib
    前言数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程.这一过程也是质量管理体系的支持过程.在实......
  • vue+echarts绘制地图
    代码实现importchinaJsonfrom'echarts/map/json/china.json'exportdefault{mounted(){letmyChart=this.$echarts.init(document.getElementById("......
  • Android 使用TableLayout动态绘制表格
    第一步:在layout文件中添加TableLayout在layout文件中添加TableLayout组件,其中添加两行TableRow,绘制表格标题和表格列的名称。在需要分格的TableRow中添加LinearLayout,,......
  • Python蟒蛇绘制
    Python之turtlePython蟒蛇绘制:importturtleturtle.setup(650,350,200,200)turtle.penup()turtle.fd(-250)turtle.pendown()turtle.pensize(25)turtle.pencolor("purple")tu......