关于使用uniapp截图APP内容的两种办法,及一种小程序原生的截图办法

这篇具有很好参考价值的文章主要介绍了关于使用uniapp截图APP内容的两种办法,及一种小程序原生的截图办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一 html2canvas

<template>
	<view>
		<view id="container" class="content">
			<view ref="imageDom" class="card">
				截图内容
			</view>
		</view>
		<view class="buttonArea">
			<view class="buttonItem" @click="canvasToImage.generateImage_Share">
				<image src="../../static/logo_button.png" class="buttonImg"></image>
				<view class="buttonTxt">分享给朋友</view>
			</view>
			<view class="buttonItem" @click="canvasToImage.generateImage">
				<image src="../../static/save_button.png" class="buttonImg"></image>
				<view class="buttonTxt">保存到相册</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				logo: logo(),
				topBackground: topBackground(),
				QrCode: QrCode(),
				data: {
					type: '',
					titleTime: '',
					Slogan: []
				},
				info: {},
				name: uni.getStorageSync('nickname'),
				avatar: uni.getStorageSync('avatar')
			}
		},
		
		mounted() {},
		methods: {

            // 保存图片
			getSaveImg(data) {
				uni.showLoading({
					mask: true
				})
				let base64data = data.base64data;
				// console.log("base64data", base64data)
				// return 
				let bitmap = new plus.nativeObj.Bitmap("test");
				bitmap.loadBase64Data(base64data, function() {
					console.log("加载Base64图片数据成功");
					let time = Date.now()
					let url = '_downloads/yflPic' + time + '.png';
					uni.hideLoading()
					bitmap.save(url, {}, function(i) {
						console.log('保存图片成功:' + JSON.stringify(i));
						// 保存图片到相册
						uni.saveImageToPhotosAlbum({
							filePath: url,
							success: function() {
								uni.showToast({
									title: '图片保存成功',
									icon: 'none'
								})
								// 图片保存成功后,将临时保存的图片删除
								plus.io.resolveLocalFileSystemURL(
									url,
									function(entry) {
										entry.getMetadata(function(metadata) {
											// console.log("fileCount=" + metadata.fileCount);
											entry
												.remove(); //删除单个文件 _downloads/改文件名

										});
									},
									function(error) {
										// uni.showToast({ title: "下载文件" });
										console.log("error" + error);
									}
								);
								bitmap.clear()
							}
						});
						bitmap.clear();
					}, function(e) {
						onsole.log('保存图片失败:' + JSON.stringify(e));
						bitmap.clear();
					});
				}, function() {
					console.log('加载Base64图片数据失败:' + JSON.stringify(e));
					bitmap.clear();
				});
			},

            // 分享图片
			getSaveImg_Share(data) {
				uni.showLoading({
					mask: true
				})
				let base64data = data.base64data;
				let bitmap = new plus.nativeObj.Bitmap("test");
				bitmap.loadBase64Data(base64data, function() {
					console.log("加载Base64图片数据成功");
					let time = Date.now()
					let url = '_downloads/yflPic' + time + '.png';
					uni.hideLoading()
					bitmap.save(url, {}, function(i) {
						console.log('保存图片成功:' + JSON.stringify(i));
						// 转发图片到微信
						uni.share({
							provider: "weixin",
							scene: "WXSceneSession",
							type: 2,
							imageUrl: url,
							success: function(res) {
								console.log("success:" + JSON
									.stringify(res));
								bitmap.clear();
							},
							fail: function(err) {
								console.log("fail:" + JSON.stringify(
									err));
							}
						});

					}, function(e) {
						onsole.log('保存图片失败:' + JSON.stringify(e));
						bitmap.clear();
					});
				}, function() {
					console.log('加载Base64图片数据失败:' + JSON.stringify(e));
					bitmap.clear();
				});
			},
		}
	}
</script>

<script module="canvasToImage" lang="renderjs">
	import html2canvas from 'html2canvas';
	export default {
		data() {
			return {}
		},
		methods: {
			// 获取设备的Dpr值
			getDpr() {
				if (window.devicePixelRatio && window.devicePixelRatio > 1) {
					return window.devicePixelRatio;
				}
				return 1;
			},
			/**
			 * 将传入值转为整数
			 * @param value
			 * @returns {number}
			 */
			parseValue(value) {
				return parseInt(value, 10);
			},

            // 截图后保存到本地
			generateImage(event, ownerInstance) {
				// 获取想要转换的dom节点
				var dom = document.getElementById('container');
				html2canvas(dom, {
					// allowTaint: false,
					width: dom.clientWidth,
					height: dom.clientHeight,
					scrollY: 0,
					scrollX: 0,
					useCORS: true
				}).then(function(canv) {
					// 将canvas转换成图片渲染到页面上
					let url = canv.toDataURL('image/jpg'); // base64数据
					ownerInstance.callMethod('getSaveImg', {
						base64data: url
					})
				});
			},

            // 截图后分享给好友
			generateImage_Share(event, ownerInstance) {
				// 获取想要转换的dom节点
				var dom = document.getElementById('container');
				html2canvas(dom, {
					// allowTaint: false,
					width: window.clientWidth,
					height: window.clientHeight,
					useCORS: true,
					dpi: 350
				}).then(function(canv) {
					// 将canvas转换成图片渲染到页面上
					let url = canv.toDataURL('image/jpg'); // base64数据
					ownerInstance.callMethod('getSaveImg_Share', {
						base64data: url,
					})
				});
			},
		}
	}
</script>

<style lang="scss" scoped>
	.content {
		// display: flex;
		// flex-direction: column;
		// align-items: center;
		// justify-content: center;
	}

	.card {
		width: 100%;
		background: #3F65F4;

		// padding: 16px;
		.topTitle {
			background: url('data:image/png;base64,iVBORw0K...GgoK5CYII=') no-repeat;//这里想要图片能够截取清晰则必须使用base64
			background-size: 100% 100%;
			width: 100%;
			height: 151px;
			padding: 16px;

			.title {
				font-weight: 600;
				font-size: 36px;
				color: #F5F5F7;
			}

			.time {
				margin-top: 15px;
				font-weight: 500;
				font-size: 12px;
				color: #fff;
			}
		}
    }
</style>

方法二 播放视频时截图

<template>
	<z-paging-swiper>
		<view slot="top" style="height: 40px;">
			<u-tabs-swiper ref="uTabs" :list="tabList" active-color="#5148ff" :current="current" @change="tabsChange"
				:is-scroll="false" swiperWidth="750"></u-tabs-swiper>
		</view>
		<swiper class="swiper" :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish">
			<swiper-item class="swiper-item">
				<view>
					<video id="container" class="videoBox" :src="playUrl" :controls="true"
						:enable-progress-gesture="false" :title="videoName+videoCode" :is-live="true">
					</video>
				</view>
				<view class="ctrlBox">
					<view class="remoteBox">
						<zhangyubao-remote @remote="remote"></zhangyubao-remote>
					</view>
				</view>
				<view>
					<button @click="doshot"> 抓拍</button>
				</view>
			</swiper-item>
			<swiper-item class="swiper-item">
			    2
			</swiper-item>
			<swiper-item class="swiper-item">
                3
			</swiper-item>
		</swiper>

	</z-paging-swiper>
</template>

<script>
	import {
		throttle,
		formatDate
	} from '@/common/util.js'
	export default {
		data() {
			return {
				videoCode: '',
				videoId: '',
				videoNo: null,
				videoName: '',
				playUrl: '',
				current: 0, // tabs组件的current值,表示当前活动的tab选项
				swiperCurrent: 0,
				// 回放时间
				datetimerange: [],
				// 抓拍时间
				datetimerangePic: [],
				dataList: [],
				videoContext: ''
			}
		},
		onLoad(options) {
			
		},
		methods: {

			// tabs通知swiper切换
			tabsChange(index) {
				this.swiperCurrent = index
			},
			// swiper-item左右移动,通知tabs的滑块跟随移动
			transition(e) {
				let dx = e.detail.dx
				this.$refs.uTabs.setDx(dx)
			},
			// swiper滑动结束,分别设置tabs和swiper的状态
			animationfinish(e) {
				let current = e.detail.current
				this.$refs.uTabs.setFinishCurrent(current)
				this.swiperCurrent = current
				this.current = current
				console.log("tab滑动", this.current);
			},
			datetimePlay(e) {
				console.log("回放时间", e);
			},
			datetimePic(e) {
				console.log("抓拍时间", e);
			},
			doshot() {
				this.videoContext = uni.createVideoContext('container'); //创建视频实例指向video
				this.videoContext.pause(); //先对视频进行暂停,防止截图黑屏
				this.$nextTick(() => {
					this.getCapture()
				})
			},
			getCapture() {
				let that = this
				let pages = getCurrentPages();
				let page = pages[pages.length - 1];
				let ws = page.$getAppWebview()
				var bitmap = new plus.nativeObj.Bitmap('test');
				// 将webview内容绘制到Bitmap对象中  
				ws.draw(bitmap, () => {
					// 将原生Bitmap转换成Base64字符串  
					let base64data = bitmap.toBase64Data()
					bitmap.loadBase64Data(base64data, function() {
						// console.log("加载Base64图片数据成功");
						let time = formatDate(new Date(), 'yyyyMMddHHmmss')
						let url = '_downloads/four-faith_' + time + '.jpg';
						uni.hideLoading()
						bitmap.save(url, {}, function(fileinfo) {
							// console.log('保存图片成功:' + fileinfo);
							// 保存图片
							let params = {
								base64: base64data.split(',')[1],
								captureTime: formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss'),
								deviceNo: that.videoCode,
								fileName: "app_" + that.videoCode + '_' + that.videoNo + '_' +
									time +
									'.jpg',
								fileSize: fileinfo.size,
								videoNo: 1
							}
									uni.showToast({
										title: '抓拍成功',
										icon: 'none',
									})
								
							bitmap.clear();
						}, function(e) {
							onsole.log('保存图片失败:' + JSON.stringify(e));
							bitmap.clear();
						});
					}, function() {
						console.log('加载Base64图片数据失败:' + JSON.stringify(e));
						bitmap.clear();
					});
					this.videoContext = uni.createVideoContext('container'); //创建视频实例指向video
					this.videoContext.play();
				}, (e) => {
					console.log('截屏绘制图片失败:', e);
					uni.showToast({
						title: '抓拍失败',
						icon: 'none',
					})
				}, {
					check: true, // 设置为检测白屏
					// 设置截屏区域
					clip: {
						top: uni.getSystemInfoSync().statusBarHeight + 90,
						left: '0px',
						height: '400px',
						width: '100%'
					}
				});
			},
		}
	}
</script>

<style>
	page {
		background-color: #f6f5f8;
	}

	.swiper {
		height: 100%;
	}

	.videoBox {
		width: 100%;
		height: 300px;
		/* background-color: #fff000; */
	}

	.ctrlBox {
		margin-top: 30rpx;
	}

	.remoteBox {
		display: flex;
		justify-content: center;
	}

	.selectTime {
		padding: 10rpx 20rpx;
	}
</style>

方法三 小程序原生使用的截图文章来源地址https://www.toymoban.com/news/detail-540032.html

到了这里,关于关于使用uniapp截图APP内容的两种办法,及一种小程序原生的截图办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于部署vue项目在Linux上的两种方式tomcat以及nignx(1)使用tomcat进行部署

    阿丹有话说:         之前在写spring-boot项目的时候是直接写的jsp页面直接打成war包来运行。使用到了tomcat,而且简单方便,但是美中不足就是动画演示以及页面没有办法做的非常美观。自从开始写前后端分离的项目(微服务等)之后,发现element-ui是真的好用。现在想给vue的

    2024年02月03日
    浏览(47)
  • 【JavaWeb】关于Servlet的两种配置Web.xml文件配置或使用@WebServlet注解及urlPattern配置规则

    首先,我们需要了解到的是在Servlet2.x版本中,配置依然是通过web.xml的形式进行配置的,升级到Servlet3.x后,才可以依赖注解式方式进行配置。 代码格式: 代码展示: 访问过程: ①servlet通过浏览器地址栏输入的路径与servlet-mapping标签中的url-pattern的标签值进行匹配。 ②通过

    2024年02月06日
    浏览(30)
  • pyautogui无法输入中文的两种解决办法

    PyAutoGUI本身不支持输入中文,但可以通过调用pyperclip模块将需要输入的中文复制到剪贴板中,然后使用pyautogui模拟Ctrl+V粘贴操作即可。 安装pyperclip模块:在命令行中输入 pip install pyperclip ,安装完成后即可使用。 PyAutoGUI本身不支持输入中文,但可以通过调用系统的输入法来实

    2024年02月10日
    浏览(29)
  • Unity Hub无法登陆的两种终极解决办法

    最近换了个电脑,需要重装Unity, 然后unity hub 怎么都无法登陆,登陆不了就不能激活personal license。试了很多次,包括unity hub 2.5.8 和unity hub 3.3都不行,真的是很崩溃。因为是公司的电脑,限制比较多,最后找到两种解决办法,试了下,第二种解决了我的问题。寻思应该是公司

    2024年02月07日
    浏览(80)
  • 关于windows自带的两种远程访问方式

    实验环境:两台非家庭版的windows系统(我使用的win7和xp系统),在同一网段下 关于windows的两种远程访问方式:         1、将普通用户添加到远程桌面服务组(Remote Desktop Users组,该组账户专门用于为远程访问提供服务)         2、 telnet为用户提供命令行远程访问权限 使

    2024年02月07日
    浏览(25)
  • uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决

    项目场景:uniapp  APP端,分享小程序到微信好友,使用html2canvas截取当前页面做卡片封面图。仅是需要展示部分内容用作卡片封面就可以,不强制需要全屏截图。 问题1、部分页面截取到的图片分享到微信后卡片图片模糊。 问题2、截图时报错:Failed to execute \\\'toDataURL\\\' on \\\'HTMLC

    2024年02月05日
    浏览(68)
  • 关于 Token 过期问题的两种解决方案

     对于token过期,我们有两种方案:   方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。 我们希望当响应返回的数据是401身份过期时,让当前浏览页面强行跳转到登入页面,让用户 手动更新token。拿到

    2024年01月17日
    浏览(33)
  • 360WiFi和校园网不兼容的两种解决办法

    360WiFi或者360免费WiFi,我记得早期的时候是不能和校园网兼容,现在的校园网比较人性化了一些,比如小编用的锐捷,当前是可以与360WiFi兼容了,不过也不排除还有其他童鞋,会遇到类似的不兼容问题,所以这里给大家分享一些些小技巧。可能是你没有发现的一些东西。 一、

    2024年02月07日
    浏览(32)
  • 关于 python 在 pycharm 下载库的两种方法

    正常操作: 1.点击左上角File 。  2.点击setting,进入设置界面 。 3.点击python Interpreter。  4.添加新库时,点击右上侧 “ + ” 号,出现新界面。  5,在搜索框搜索想添加的库,点击左下角 Instal  Package , 等待完成即可。 特殊情况:  此时可能出现失败情况 直接打开电脑搜索栏,

    2024年02月12日
    浏览(35)
  • 关于axios的两种拦截方式:请求拦截和响应拦截

    提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 axios.interceptors.request.use() 请求拦截 axios.interceptors.request.use( function ( config ) { return config }) 这个方法的参数是一个函数,发送请求之前就会执行这个函数,函数里面的参数就是执

    2024年01月24日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包