微信小程序,canvas使用fillText()文字错位问题解决方案

一、问题

官方是这样解释的 ctx.fillText(string text, number x, number y, number maxWidth)的:
此API用于在在画布上绘制被填充的文本,其中,x和y分别表示文本距离左上角 x 和y坐标位置

const ctx = wx.createCanvasContext('myCanvas')
ctx.setFontSize(20)
ctx.fillText('Hello', 20, 20)
ctx.fillText('MINA', 100, 100)
ctx.draw()

在这里插入图片描述
好像没有什么问题,但是在开发过程中,表现却不是这样的。
如下面:
定义一个canvas, height和width设置成300px

<view class="intro">
  <canvas style="width: 300px; height: 300px;" canvas-id="firstCanvas"></canvas>
</view>

获取canvas对象,并且填充背景色为灰色,

    const context = wx.createCanvasContext('firstCanvas');
    context.setFillStyle('#CCCCCC');//填充背景
    context.fillRect(0, 0, 300,300);
    context.setFillStyle('#000000');//字体颜色
    context.fillText('以字生图',0, 0);
    context.draw();

表现如图:明明设置在左上角x和y轴0点处开始,但是却看不到了,这是为什么呢?
在这里插入图片描述
很明显,Y轴偏移量错位一定是小程序的Bug.

如何解决?

经过测试我发现,fillText(text,x, y),轴的y实际上不是指文字左上角到画布零点的距离,而是指文字的左下角到零点的距离。
所以我们只需要在原本想要设置的y轴上再加上文本的宽度就行了

    const context = wx.createCanvasContext('firstCanvas');
    const fontWidth= context.measureText('以').width;//获取文本宽度
    context.setFillStyle('#CCCCCC');
    context.fillRect(0, 0, 200, 200);
    context.setFillStyle('#000000');
    context.fillText('以字生图', 0, 0 + fontWidth);//本来设置的0,现在需要加上fontWidth
    context.draw();

如图:
在这里插入图片描述
自己写的小程序,支持文字生成图片,多行操作,字体选择哦;

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值