canvas生成二维码海报-可配置

简介

可通过选择图片、配置图片间距、是否展示合伙人等,使用canvas来生成海报,下面为选择4和2张图片的海报截图;

开发过程中学到的东西

1、自动闭合及非零环绕原则
在绘制气泡和海报的时候需要绘制圆角,网上有查找到相关的方案但是并不满意,后来了解到canvas绘制arc会首尾相连,即第一个arc的终点会连接第二个arc的起点(在没有使用moveTo的情况,使用moveTO已经把画笔移动走了,当然不会连接啦),这样只需要绘制四个角的圆弧就可以啦;


_drawCanvasBoard (ctx) {
// 绘制背景
	ctx.save()
	ctx.rect(0, 0, this.canvasWidth, this.canvasHeight)
	ctx.setFillStyle('#e6e6e6')
	ctx.fill()
	ctx.restore()
	const x = this.margin,
		y = this.margin,
		w = this.canvasWidth - this.margin * 2,
		h = this.canvasHeight - this.margin * 2,
		r = 10;
	ctx.beginPath()
	ctx.arc(x+r, y+r, r, Math.PI, Math.PI * 1.5)
	ctx.arc(w+x-r, y+r, r, -0.5 * Math.PI, 0)
	ctx.arc(w+x-r, y+h-r, r, 0, 0.5 * Math.PI)
	ctx.arc(x+ , y+h-r, r, 0.5 * Math.PI, Math.PI)
	ctx.closePath()
	ctx.setFillStyle('#efefef')
	ctx.fill()
}
drawBubble (x, y, w, h, r, ctx) {
	// 绘制气泡
	ctx.beginPath()
	ctx.arc(x, y + r, r, Math.PI, Math.PI * 1.5)
	ctx.arc(w+x-r, y+r, r, -0.5 * Math.PI, 0)
	ctx.arc(w+x-r, y+h-r, r, 0, 0.5 * Math.PI)
	ctx.arc(x, y+h-r, r, 0.5 * Math.PI, Math.PI)

	ctx.arc(x-r-4, y+0.6*h, 4, 0, Math.PI * 1.7, true)
	ctx.arc(x-r-6, y+0.3*h, 3, Math.PI * 0.5, Math.PI)
	ctx.arc(x-r-2, y+0.25*h, 2, Math.PI * 0.4, Math.PI * 2, true)
	ctx.closePath()
	ctx.setFillStyle('#fff')
	ctx.fill()
	
	ctx.setFillStyle('#333')
	ctx.save()
	ctx.beginPath()
	ctx.setFontSize('12')
	ctx.fillText(this.userTel, x, y + r + h/4 - 4)
	ctx.restore()
	
	ctx.save()
	ctx.setFontSize('13')
	ctx.fillText('这是我发现的超值好物~', x, y+r+h/2 + 4)
	ctx.restore()
},

2、隐藏超出的字
计算字的宽度和可绘制区域的宽度,多余的截取掉再拼接上’…’;

measureText (text, ctx) {
	const width = this.contentWidth - 2 * this.padding - 30
	while(ctx.measureText(text).width > width) {
		text = text.substring(0, Math.floor(text.length * 0.8)) + '...'
	}
	return text
}

3、缓存图片资源
4、文字换行
同理需要计算文字宽度与可绘制区域的宽度,截取后绘制。参考了文章canvas文本绘制自动换行、字间距、竖排等实现

总结

微信扫码体验

小程序码海报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用uniapp的相关插件来生成二维码海报。以下是一个简单的示例: 1. 首先,安装uniapp的二维码插件。你可以在uniapp插件市场中搜索并安装适合你的插件。 2. 在你的uniapp项目中创建一个新的页面,用于生成二维码海报。 3. 在该页面中,引入二维码插件,并调用相关方法生成二维码。 4. 创建一个canvas元素,用于绘制二维码和海报内容。 5. 使用canvas的API,将二维码和其他内容绘制在canvas上。 6. 将canvas转换为图片,并保存为海报。 下面是一个简单的代码示例: ```html <!--生成海报的页面中 --> <template> <view> <canvas id="canvas" style="width: 300px; height: 300px;"></canvas> </view> </template> <script> import qrcode from 'qrcode-plugin' // 引入二维码插件 export default { mounted() { this.generateQRCode() }, methods: { generateQRCode() { const canvas = uni.createSelectorQuery().select('#canvas') // 获取canvas元素 qrcode.toCanvas(canvas, 'https://www.example.com', error => { if (error) { console.error(error) } else { this.drawPoster(canvas) } }) }, drawPoster(canvas) { const ctx = canvas.getContext('2d') ctx.fillText('Hello, World!', 10, 10) // 绘制其他内容 canvas.toTempFilePath({ success(res) { console.log(res.tempFilePath) // 海报图片路径 }, fail(error) { console.error(error) } }) } } } </script> ``` 这只是一个简单的示例,实际应用中你可能需要根据自己的需求进行修改和扩展。请注意,具体的插件和使用方法可能因插件的不同而有所差异,请参考插件的文档进行具体操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值