uniapp APP端页面转为图片

<script module="html2canvas" lang="renderjs">
	import html2canvas from 'html2canvas';
	export default {
		created() {
			var that = this
			setTimeout(function() {
				// that.emitData()
			}, 3000)
		},
		methods: {
			emitData() {
				console.log('开始。。。')
				// 根据自己需要截图区域
				this.create('detail');
			},
			async create(id) {
				if (!id) {
					return false;
				}
				try {
					this.$ownerInstance.callMethod('showLoading', true);
                    //调用上一个script的方法
 
					const timeout = setTimeout(async () => {
						const domId = document.getElementById(id);
						const canvas = await html2canvas(domId, {
							width: domId.offsetWidth, 
                            //设置canvas尺寸与所截图尺寸相同,防止白边
							height: domId.offsetHeight, //防止白边
							logging: true,
							useCORS: true
						});
						const base64 = canvas.toDataURL('image/jpg', 1);
						console.log("base64图", base64)
						this.$ownerInstance.callMethod('renderFinish', {
							path: base64,
							el: id
						});
						clearTimeout(timeout);
					}, 500);
				} catch (error) {
					console.log(error)
				}
			}
		}
	}
</script>
<script>
			showLoading() {
				console.log("加载中")
				uni.showLoading({
					title: '加载中...',
					mask: false
				});
			},
			renderFinish(opt) {
				console.log("生成完成",opt.path)
				base64ToPath(opt.path)
				.then(path => {
					console.log(path,'path')
					uni.hideLoading()
					this.saveImage(path);  
				})
				.catch(error => {
					 console.error('临时路径转换出错了:', error);
				});
			},
			saveImage(url){
				uni.saveFile({
					tempFilePath:url,
					async success(res) {
						console.log(res.savedFilePath, 'res.savedFilePath')
						uni.openDocument({
							filePath:res.savedFilePath,
							success: function(FileRes) {
								console.log('打开成功');
							}
						}); 
						setTimeout(function() {uni.navigateBack();}, 500);
					},
					complete(res) {
						console.log(res,'res')
					}
				})
			},
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app中,可以使用uni.createSelectorQuery()方法和canvas API来实现将页面转为图片的功能,并且支持app和小程序两个平台。具体实现步骤如下: 1. 在编辑页面中,添加一个canvas元素,用于绘制海报。 2. 使用uni.createSelectorQuery()方法获取页面上需要绘制的元素节点,如文本、图片等。 ```javascript const query = uni.createSelectorQuery() query.select('#text').boundingClientRect() query.select('#image').boundingClientRect() query.exec((res) => { const textRect = res[0] const imageRect = res[1] // ... }) ``` 3. 在获取到元素节点后,使用canvas API进行绘制,将文本和图片绘制到canvas上。 ```javascript const ctx = uni.createCanvasContext('poster') ctx.drawImage(imageUrl, imageRect.left, imageRect.top, imageRect.width, imageRect.height) ctx.fillText(textValue, textRect.left, textRect.top) ctx.draw() ``` 4. 在canvas绘制完毕后,使用uni.canvasToTempFilePath()方法将canvas转为临时文件路径,用于保存和分享。 ```javascript uni.canvasToTempFilePath({ canvasId: 'poster', destWidth: 750, destHeight: 1334, success: (res) => { this.posterUrl = res.tempFilePath } }) ``` 5. 最后,将生成的海报保存或分享到微信朋友圈等平台。 以上是在uni-app中将页面转为图片的基本实现思路,具体细节和实现方式可以根据实际需求进行调整和优化。同时需要注意,在小程序平台中,需要在小程序后台开通canvas绘图权限才能正常使用canvas API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值