uniapp使用中遇到的问题一:小程序端把当前页面另存为图片

这篇具有很好参考价值的文章主要介绍了uniapp使用中遇到的问题一:小程序端把当前页面另存为图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遇到了一个这样的需求:客户觉得页面效果好看,想保存为图片。但是呢,截图会带上手机自身的状态栏,所以开始整活!

在网上看了很多方法,总结下来一下四种:

方法一:用canvas来把页面画出来,再用uni.canvasToTempFilePath,把canvas区域保存为图片。

总结:如果你页面简单的话,可采纳该方法,如果你页面比较复杂,那未免耗时太长了~~

方法二:使用wxml-to-canvas,小程序内通过静态模板和样式绘制 canvas ,导出图片,可用于生成分享图等场景。

官网链接:wxml-to-canvas | 微信开放文档

官网代码片段允许结果:点击“导出图片”报错,不知道为啥~

uniapp 微信小程序页面转图片,uni-app,小程序

uniapp 微信小程序页面转图片,uni-app,小程序

总结:该方法没试,虽然官网案例报错了,但是看到上图代码应该也不难,后续再试试~

方法三:使用原生编写一个同样的页面做为中间页,再使用html2canvas把页面转图片,用web-view把页面渲染出来。

let element = document.getElementById("myContent")

html2canvas(element).then(canvas => {
      const imgData = canvas.toDataURL("image/png")
      console.log(imgData)
})
总结:简单写了一个demo,亲试,可行

方法四:插件painter

总结:查看下面第二个链接就知道,这相当于根据设计图把页面用painter重新设计一次。亲试,可行

官网:https://github.com/Kujiale-Mobile/Painter?tab=readme-ov-file

在线demo :React App

十分详细的参考文档:推荐推荐

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册_uniapp painter-CSDN博客

最终决定使用该方法来实现小程序页面转图片,说一下使用该插件的感受吧!总体感觉挺好用的,但是也遇到了一些问题
问题一:在微信开发者工具中导出来的图片与在线demo预览的文字效果不一致,实际导出来的效果文字被垂直拉伸,如下图所示:(当然下图还有更多效果差异的问题,这边是自己在线编辑的,组后出来的效果与编辑时的效果差异只有问题)

uniapp 微信小程序页面转图片,uni-app,小程序

解决:把导出来的json里面带有的textStyle属性注释掉

uniapp 微信小程序页面转图片,uni-app,小程序

问题二:我这边h5导出来的图片效果还不如小程序端导出来的,而且控制台会报以下错,但是能正常导出图片。

uniapp 微信小程序页面转图片,uni-app,小程序

因为我这边的需求只有小程序端需要导出图片,所以h5端的我就忽略掉了

问题三:小程序端导出来的图片用手机查看有点糊~(也是最后放弃使用该painter插件的原因)

接下来放一些代码片段:

template:

<!-- #ifdef MP-WEIXIN || H5 -->
		<painter :palette="firstPage" @imgOK="onImgOKOne" v-if="current == 0"/>
		<painter :palette="secondPage" @imgOK="onImgOKTwo" v-if="current == 1"/>
		<painter :palette="thirdPage" @imgOK="onImgOKthree" v-if="current == 2"/>
<!-- #endif -->

data:

current: 0,
imgSrc:"",
imgArr:["", "", ""],
firstPage: {},  //在线demo里导出来的json
secondPage: {},
thirdPage: {}

methods:

// 图片生成成功,可以从 e.detail.path 获取生成的图片路径
			onImgOKOne(e) {
			    this.imgArr[0] = e.detail.path
				// console.log("第一张图", e.detail.path)
			},
			onImgOKTwo(e) {
			    this.imgArr[1] = e.detail.path
				// console.log("第二张图", e.detail.path)
			},
			onImgOKthree(e) {
			    this.imgArr[2] = e.detail.path
				// console.log("第三张图", e.detail.path)
			},
			
			showModal(index){
				uni.showModal({
					title:"提示",
					content:"您是否要保存当前页面到相册?",
					confirmText:"是",
					cancelText:"否",
					success: res => {
						this.imgSrc = this.imgArr[index]
						// #ifdef MP-WEIXIN
						this.saveImg()
						// #endif
						
						// #ifdef H5
						this.h5SaveImg()
						// #endif
					}
				})
			},
			h5SaveImg(){
				var alink = document.createElement("a");
				
			    alink.href = this.imgSrc;
				console.log(this.imgSrc? '图片存在': "nonononono")
			
			    alink.download = "效果图"; //fileName保存提示中用作预先填写的文件名
			
			    alink.click();
			},
			// 保存图片
			saveImg() {
				console.log("start 保存当前页面")
			    //用户授权并开启保存到相册的权限
			    uni.authorize({
					scope: 'scope.writePhotosAlbum',
					success: (result) => {
					    if (!this.imgSrc) {
							return uni.showToast({
							    title: '图片生成中,请稍等~',
							    icon: 'none'
							})
					    }
					    // 保存到手机相册
					    uni.saveImageToPhotosAlbum({
							filePath: this.imgSrc,
							success: function (e) {
							    console.log('保存成功', e)
							    uni.showToast({
									title: '保存成功',
									icon: 'none'
							    })
							}
					    })
					},
					fail: (error) => {
					    uni.showModal({
							title: '提示',
							content: '检测到您有未开启的权限,为保证功能正常使用,请保持保存到相册权限均为开启状态',
							confirmText: '去开启',
							success: ({ confirm }) => {
							    if (confirm) uni.openSetting()
							}
					    })
					}
			    })
			},

pages.json:在使用到painter的页面做以下配置

uniapp 微信小程序页面转图片,uni-app,小程序

该问题的最终处理方案:由于需要导出页面的动态部分不多,所以采用了由设计把静态部分写死出图给后端,动态部分由后端动态生成定位在图片上,然后前端只需要拿到图片链接做一个保存的操作哈哈哈哈!绕来绕去排了一波雷,也算学到了新知识了。

反思:拿到需求的时候一定不要盲目开始,要跟项目组成员讨论,说不定后台有更好的解决办法。

最后,方法不一,大家根据自己需求选择最适合自己的方案文章来源地址https://www.toymoban.com/news/detail-852122.html

到了这里,关于uniapp使用中遇到的问题一:小程序端把当前页面另存为图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp(微信小程序端)生成海报--snapshot 的使用(不确定版本)

    1. 在manifest.json 里面 微信小程序设置里面添加这几段设置 2. 在你海报页面(page.json)设置 ,必须要设置自定义标题栏 3. 去微信小程序的文档里面搜索snapshot(组件组件组件里面找) 然后翻到最下面示例代码片段,然后点开,把他的代码复制到你得项目里面去,如果是vue3setup写法, 另外创

    2024年04月29日
    浏览(35)
  • uniapp 实现富文本编辑器【小程序端】

    css资源文件戳该链接:富文本css文件链接 编辑菜单我搞成吸顶效果了,方便手机编辑不用再滑到头部点编辑菜单:css实现元素吸顶效果 ————————————————————————————————————————————

    2024年02月16日
    浏览(45)
  • uniapp,小程序端返回上一页并传递参数

    使用场景: 从A页面跳到B页面,在数据操作后要返回A页面(使用uni.navigateBack()返回), 要求: 携带参数返回A页面,不使用链接带参数返回,不用使用缓存:uni.setStorageSync()储存数据等情况下怎么传递参数 可使用解决方案: 方法一:使用getCurrentPages() 函数获取上一页面栈的

    2024年02月08日
    浏览(36)
  • uniapp实现微信小程序端动态生成海报

    背景: 基于uniapp实现微信小程序中商品详情的海报生成与保存 效果图: 思路: 首先把海报上需要的内容准备好,比如用户头像,商品信息,二维码等。需要注意的是,因为二维码是动态生成的,所以需要后端传给我们,前端需要把路径和参数传给后端,后端请求微信服务接

    2024年02月12日
    浏览(34)
  • uniapp - 微信小程序端引入 Echarts 图表及使用详细教程,简单快速的解决方案(拒绝复杂的过程,附带详细的使用示例保姆级教程)

    现在各种平台的文章都太乱了,基本上实测无效。。。 帮你在uniapp开发中,微信小程序平台端使用 echats 图表的详细教程,快速并且简单轻松搞定。 下面是最后的运行结果,随便用的一个图表进行展示,图表更多用法详见文档!

    2024年02月10日
    浏览(37)
  • uniapp条件判断app,H5,微信小程序端

    1.在页面上判断不同的端 2.JS里面判断不同的端 3.CSS里面判断不同的端

    2024年02月05日
    浏览(34)
  • uniapp 判断微信小程序端、App端、h5端

    区分标识 写法:以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。 #ifdef:if defined 仅在某平台存在 #ifndef:if not defined 除了某平台均存在 %PLATFORM%:平台名称 此方法支持文件有 .vue (模板里使用 ) .js (使用// 注释) .css (使用 /* 注释 */) pages.json (使用// 注释) 各预编译

    2024年02月03日
    浏览(37)
  • uniapp横竖屏切换(小程序端与APP或H5端)

    这个应用在我们工作开发中非常常见,也是必不可少学习的一项技能 小程序端(这个很少能找到,所以重点来说这个小程序端的) 1.首先要进行page.json界面配置值 单页面配置 公共配置 2.其次进行使用页面onShow配置 3.看一下效果 App或H5端 参考文档

    2024年02月11日
    浏览(36)
  • uniapp - 微信小程序接入腾讯视频播放器功能插件,uniapp开发微信小程序端调用引入并使用腾讯视频播放组件完整全流程(详细示例源码,一键复制开箱即用)

    在uniapp 微信小程序项目中,集成腾讯视频功能插件,实现播放腾讯视频效果,附带详细示例源码及注释, 你可以跟着步骤一步步来,保证几分钟就能快速在uniapp小程序项目中植入腾讯视频功能!

    2024年02月12日
    浏览(36)
  • 【声网】实现web端与uniapp微信小程序端音视频互动

    利用声网实现音视频互动 注册声网账号 进入Console 成功登录控制台后,按照以下步骤创建一个声网项目: 展开控制台左上角下拉框,点击 创建项目 按钮。 在弹出的对话框内,依次选择 项目类型 ,输入 项目名称 ,选择 场景标签 和 鉴权机制 。其中鉴权机制推荐选择 安全

    2024年04月27日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包