uni小程序 canvas 2d 海报图制作流程

根据微信小程序通知从基础库 2.9.0 开始,wx.createCanvasContext()本接口停止维护,请使用 Canvas 代替。

这里开始写canvas 2d写法,直接上代码…
//海报图需要头像和图片组合的还是和以前一样的uni.getImageInfo()先转换成临时路径图片。
//html		这里设置type  和  id , 宽高
<canvas type="2d" id="myCanvas" style="width: 640rpx; height: 800rpx;"></canvas>

//js
const query = wx.createSelectorQuery()
	query.select('#myCanvas').fields({ node: true, size: true }).exec((res) => {
		//	node	boolean	false	否	是否返回节点对应的 Node 实例
		//	size	boolean	false	否	是否返回节点尺寸(width height)
		const canvas = res[0].node;
		const ctx = canvas.getContext('2d');//getContext返回Canvas 的绘图上下文
		const dpr = 1;	//比例我这里是设置的1,一般设置1就可以了
		canvas.width = 640 * dpr;
		canvas.height = 800 * dpr;
		ctx.scale(dpr,dpr);
		
		//开始绘制了... 海报一般都是图文下面写两个简单的例子
		ctx.font="30px Arial";
		ctx.fillStyle = "#333333";
		ctx.textAlign = "center";
		ctx.fillText('这里是文字', 320*dpr,200*dpr);
		//文字写法基本没有什么改变

		let headerImg = canvas.createImage();	//创建iamge实例
		headerImg.src = qrCode;	//qrCode临时图片路径
		headerImg.onload = () => {
			ctx.drawImage(headerImg, 148 * scale, 370 * scale, 345 * scale, 345 * scale);
			//图片设置路径和大小位置
			ctx.restore();	//保存上下文	多张图片要使用这个否则下面的图片不显示,其他的请大家多多指教
		};
		// 二维码
		
		setTimeout(()=>{
			wx.canvasToTempFilePath({
				quality: 1,
				canvas:canvas,
				fileType: 'png',
				success: function (res) {
					// console.log("保存成功",res.tempFilePath)
					that.showImg = res.tempFilePath
				},
				fail: function (res) {
					console.log("保存失败",res);
				}
			},that)
		}, 1000)
	})
	//这个就是延迟一秒生成图片,我一般就是用这张图片显示在页面上


			//最后一段是保存到相册的方法,就不把代码贴出来了
			uni.saveImageToPhotosAlbum({
				filePath: showImg,
				success(res) {
					uni.showToast({
						icon:'none',
						title:'海报已保存到相册'
					})
				},
				fail(res) {
				}
			})
		//最后一段是保存到相册的方法,就不把代码贴出来了
canvas 2d 绘图基本就这么多,请多多指教
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序通过 Canvas 2D 绘制海报可以用于商品展示、广告宣传等场景。下面介绍一下实现流程: 1. 页面结构 在页面中添加一个 Canvas 标签,设置 id 和宽高: ```html <canvas id="poster" style="width: 750rpx; height: 1334rpx;"></canvas> ``` 2. 获取 Canvas 上下文 在页面的 onLoad 函数中获取 Canvas 上下文: ```javascript let ctx = wx.createCanvasContext('poster'); ``` 3. 绘制背景 使用 Canvas 2D 绘制背景,可以使用 fillRect 方法绘制一个填充矩形: ```javascript ctx.setFillStyle('#ffffff'); ctx.fillRect(0, 0, 750, 1334); ``` 4. 绘制片 使用 drawImage 方法绘制片,需要先将片下载到本地: ```javascript wx.getImageInfo({ src: 'https://example.com/image.png', success: function(res) { ctx.drawImage(res.path, 0, 0, 750, 500); } }); ``` 5. 绘制文本 使用 fillText 或者 strokeText 方法绘制文本,需要设置字体样式和对齐方式: ```javascript ctx.setFontSize(32); ctx.setTextAlign('center'); ctx.fillText('这是一段文本', 375, 600); ``` 6. 保存海报 使用 Canvas 2D 的 toTempFilePath 方法将绘制的海报保存到本地: ```javascript ctx.draw(false, function() { wx.canvasToTempFilePath({ x: 0, y: 0, width: 750, height: 1334, canvasId: 'poster', success: function(res) { console.log(res.tempFilePath); } }); }); ``` 完整代码: ```javascript Page({ onLoad: function() { let ctx = wx.createCanvasContext('poster'); ctx.setFillStyle('#ffffff'); ctx.fillRect(0, 0, 750, 1334); wx.getImageInfo({ src: 'https://example.com/image.png', success: function(res) { ctx.drawImage(res.path, 0, 0, 750, 500); } }); ctx.setFontSize(32); ctx.setTextAlign('center'); ctx.fillText('这是一段文本', 375, 600); ctx.draw(false, function() { wx.canvasToTempFilePath({ x: 0, y: 0, width: 750, height: 1334, canvasId: 'poster', success: function(res) { console.log(res.tempFilePath); } }); }); } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值