uniapp生成海报

uniapp生成海报

我们最后想要的效果:
在这里插入图片描述
1.分析结构:
因为只有二维码是后台获取的所以我们只有一个大背景图和一个二维码
2.所用技术:
uni.createCanvasContext----创建canvas对象并且将图片等元素插入到canvas中
uni.canvasToTempFilePath----将canvas对象转换成图片
uni.saveImageToPhotosAlbum----保存图片
3.操作
首先在页面中插入一个canvas标签并且设置 canvas-id、样式

<canvas canvas-id="canvas" style="width:648rpx;height: 936rpx;margin: 30rpx auto;"></canvas>

当我们页面解析完成之后执行

			async creatCanvas(url) {
				let that = this
				//创建canvas对象
				this.canvas = uni.createCanvasContext('canvas', this);
				//这里是我自己的方法下载图片
				//canvas中的插入的图片不能是网络地址只能是下载到本地的 
				let imgUrl = await this.urlTofile(url);
				//插入背景图 第2 3 4 5参数单位是px的所以我们要做适配 rpx转换为px 可以自定义方法 也可以使用uniapp中的方法
				this.canvas.drawImage(require('./static/canvas.png'), 0, 0, this.rpxTopx(648), this.rpxTopx(936));
				//将二维码插入到canvas中
				this.canvas.drawImage(imgUrl, this.rpxTopx(174), this.rpxTopx(450), this.rpxTopx(300), this
					.rpxTopx(300));
				//成功之后
				this.canvas.draw(true, res => {
					setTimeout(() => {
					//讲canvas转换成图片
						uni.canvasToTempFilePath({
							x: 0,
							y: 0,
							canvasId: 'canvas',
							fileType: 'png',
							quality: 1,
							success: success => {
								this.imgUrl = success.tempFilePath
								// that.canvas.draw()
							}
						})
					}, 500)

				});
			},

这里海报图就出来了也已经存到 imgUrl字段里了
然后就是保存图片

			savePhoto() {
				uni.saveImageToPhotosAlbum({
					filePath: this.imgUrl,
					success: () => {
						// uni.hideLoading();
						uni.showToast({
							title: '保存成功',
							icon: 'none'
						})
					},
					fail: () => {
						uni.hideLoading();

					},
					complete: () => {

					}
				});
			},

最后提供一下 rpx转px 和下载图片的方法

			//rpx转px
			rpxTopx(rpx) {
				return (rpx / 750) * wx.getSystemInfoSync().windowWidth
			},
			//下载图片
			urlTofile(url) {
				return new Promise((resolve, reject) => {
					uni.getImageInfo({
						src: url,
						success(res) {
							resolve(res.path)
						},
						fail(res) {
							console.log("fail -> res", res)
							uni.showToast({
								title: "图片下载异常",
								duration: 2000,
								icon: "none"
							})
						}
					})

				})
			},
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值