uniapp实现页面固定区域转为base64图片预览并手动保存本地

uniapp实现页面固定区域转为base64图片预览并手动保存本地

声明:H5目前没有实现直接长按保存到手机图库(浏览器可以直接保存为图片),所以将过程中得到的base64转为真实图片地址用a标签click的方式实现预览,并手动长按图片来保存。

需安装插件 html2canvas base64ToPath

<view class="subDowncssB1 myEwaigochC1" id="poster" >
					//这个是绘图区只要id唯一就可以
				</view>

<image src="../../static/ly17.png" mode="" @click="renderScript.exportPhoto"
				class="subDowncssC1 myEwaigochD1" >
			</image>
			//这是点击预览按钮

<script module="renderScript" lang="renderjs">
	//引入组件,没有安装的先去安装,怎么安装这里不用多说
	import html2canvas from 'html2canvas';
	import {
		base64ToPath
	} from '@/node_modules/image-tools/index.js';
	export default {
		methods: {
			exportPhoto(e, ownerVm) {
				uni.showModal({
					title: "提示",
					content: "预览时长按图片可保存,点击右上角三个点可实现分享",
					success: (res) => {
						if (res.confirm) {
							//下面的代码可能会比较耗时,给个加载动画
							ownerVm.callMethod('openLoading')
							var dom = document.querySelector('#poster'); // 获取dom元素
							html2canvas(dom, {
								width: dom.clientWidth, //dom 原始宽度
								height: dom.clientHeight,
								scrollY: 0,
								scrollX: 0,
								backgroundColor: null, //背景为透明色
								useCORS: true, //支持跨域,但好像没什么用
							}).then((canvas) => {
								// 将生产的canvas转为base64
								var base64 = canvas.toDataURL('image/png')
								// 将数据回调给第一个script
								ownerVm.callMethod('receiveRenderData', base64)
							}).catch((e) => {
								console.log(e);
							});
						}
					}
				})



			}
		}
	}
</script>

这个写到另一个script的methods里边
	//通过下面的方法将html转换为图片base64数据回调给此处
			receiveRenderData(data) {
//这里是把base64传给后端让他处理成链接,图片预览,让用户长按图片保存
				$api.base64ToImg({
					imgStr: data
				}).then(res => {
					console.log(res.content)
					if (res.code == 0) {
						//创建一个a标签
						var link = document.createElement('a');
						//把a标签的href属性赋值到生成好了的url
						link.href = res.content

						//通过a标签的download属性修改下载图片的名字
						link.download = '互动留言.png';
						//让a标签的click函数,直接下载图片
						link.click();
						uni.hideLoading()
						this.toclosedOver()
					}
				})
				return
//下边这一部分是使用base64直接保存图片的,但是手机无法保存所以先注释了(浏览器可以)。
				let that = this;
				base64ToPath(data, '.jpeg').then(function(imgPath) {
					console.log('111', data)
					//保存到手机相册,
					// #ifdef H5
					uni.downloadFile({
						url: imgPath,
						success: (res) => {
							//创建一个a标签
							var link = document.createElement('a');
							//把a标签的href属性赋值到生成好了的url
							console.log(12312, imgPath)
							link.href = imgPath

							// http://192.168.2.34:9094/home/waterMark/80/140/9/140/kAkEkhUeDE4SKkBq.jpg

							//通过a标签的download属性修改下载图片的名字
							link.download = '互动留言.png';
							// link.download = imgPath.replace(/(.*\/)*([^.]+.*)/ig,"$2").split("?")[0];
							//让a标签的click函数,直接下载图片
							link.click();


							uni.hideLoading()
							that.toclosedOver()
						}
					})
					// #endif
					// #ifndef H5
					uni.saveImageToPhotosAlbum({
						filePath: imgPath,
						success: function() {
							uni.hideLoading()
						},
						fail: err => {

						}
					});
					// #endif


				})
			},
			openLoading() {
				uni.showLoading({
					title: '加载中......'
				})
			},
相关推荐
灰天7682 小时前
健身房项目 Uniapp+若依Vue3版搭建!!
uni-app
桂月二二5 小时前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
CodeClimb6 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
hunter2062066 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb6 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角6 小时前
CSS 颜色
前端·css
九酒7 小时前
从UI稿到代码优化,看Trae AI 编辑器如何帮助开发者提效
前端·trae
浪浪山小白兔7 小时前
HTML5 新表单属性详解
前端·html·html5
lee5768 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579658 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter