uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决

这篇具有很好参考价值的文章主要介绍了uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

项目场景:uniapp  APP端,分享小程序到微信好友,使用html2canvas截取当前页面做卡片封面图。仅是需要展示部分内容用作卡片封面就可以,不强制需要全屏截图。


问题描述

问题1、部分页面截取到的图片分享到微信后卡片图片模糊。

问题2、截图时报错:Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported。


实现方案:

APP端 html2canvas截图步骤:

1、npm方式下载

npm i html2canvas

2、引用 html2canvas

import html2canvas from 'html2canvas'

 3、APP中需要用renderjs方式进行,开始截图:

  1)在需要截图的页面定义如下renderjs的截图函数:

<script module="canvasToImage" lang="renderjs">
	import html2canvas from 'html2canvas';
	export default {
		data() {
			return {}
		},
		methods: {
			getImage(event, ownerInstance) {
				ownerInstance.callMethod('showLoading', {})
				//containert为需要操作的dom节点,也就是定义的id值
				var dom = document.getElementById('containert');
				html2canvas(dom, {
					width: window.clientWidth,
					height: 200,
					useCORS: true,
					scale: 1,
					dpi: 1000
				}).then(function(canv) {
					let url = canv.toDataURL('image/jpg'); // base64数据
					//getImgToShare回调到主script的函数
					ownerInstance.callMethod('getImgToShare', {
						base64data: url,
					})
				});
			},
		}
	}
</script>

 2)、在主script定义回调函数“getImgToShare”,用于处理分享逻辑

getImgToShare(data) {
				let that=this
				let base64data = data.base64data;
				let bitmap = new plus.nativeObj.Bitmap("test");
				bitmap.loadBase64Data(base64data, function() {
					let url = '_downloads/yflPic' + Date.now() + '.png';
					bitmap.save(url, {}, function(i) {
						var obj={
							title: '分享标题',
							path: '分享的小程序路径',
							appid: '小程序原始id originalId',
							imageUrl:url
						}
						uni.share({
						    provider: 'weixin',
						    scene: "WXSceneSession",
						    type: 5,
						    imageUrl: obj.imageUrl',
							title: obj.title,
						    miniProgram: {
						        id: obj.appid,
						        path: obj.path,
						        type: 0,
						        webUrl: 'http://uniapp.dcloud.io'
						    },
						    success: ret => {
						        console.log(JSON.stringify(ret));
						    }
						});
					}, function(e) {
						bitmap.clear();
					});
				}, function() {
					bitmap.clear();
				});
			},

 3)页面触发:@click="canvasToImage.getImage"

<view class="share-app" @click="canvasToImage.getImage">
					<image  class="clap-detail-comment_btn_img" :src="imgServer('ruralRevitalization/clapDetail/comment-share.png')"></image>
				</view>

4)定义需要截取的dom,对需要操作的标签用 id="containert"标记

<view class="mainBox" id="containert"> 
		<view class="">
			截取内容
		</view>
	</view> 

 

 解决方案:

  以上步骤就能实现了截图分享小程序功能,现在来解决开头说的两个问题:

 问题1、分享的卡片图片模糊

  在代码中找到如下代码:

html2canvas(dom, {
					width: window.clientWidth,//画布宽度
					height: 200,//画布高度
					useCORS: true,//支持跨越
					scale: 1,//缩放比例
					dpi: 1000//图片尺寸
				})

  参数调整,不同的页面可能需要调整不同的参数才能得到清晰的图片:

       1、  width,画布的宽度,这个不用调整;

        2、height,画布的高度,有时候页面可能有很多内容,高度太长,截取到的图片也会模糊,所          以可以写一个固定值,具体值多少可根据实际效果来定,

       3、useCORS: true  支持跨域,不需要改

       4、scale,缩放比例,值越高,图片越高清,默认值为1,可适当提高

       5、dpi,dpi是指某些设备分辨率的度量单位。dpi越低,扫描的清晰度越低,dpi越高,清晰               度越高.

所以我们可以动态调整height、scale、dpi这三个值,就可以得到清晰的图片。

问题二、截图时报错:Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported。

      1、页面如果同时出现加载本地图片和网络图片的,需要把加载本地图片的image转为base64后再截图。网络图片需要支持跨域。

      2、如果对截图内容不是很在意的可以使用“data-html2canvas-ignore="true"”忽略掉某个image,这样绘制时就不会去处理这个image了,也就间接解决了跨域问题了。

      还有其他的解决方法,我列的这个是我遇到的哦....文章来源地址https://www.toymoban.com/news/detail-755464.html

到了这里,关于uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue2 -- 截图工具html2canvas

    可以将网页中的指定元素或整个页面截取为图片,以便保存或分享。 在 Vue 中使用 html2canvas 实现 1:安装 html2canvas 库。你可以使用 npm 安装,命令如下: 2:在需要使用 html2canvas 的 Vue 组件中,引入 html2canvas 库: :3:编写截图逻辑。你可以在组件的方法中编写,例如:

    2024年01月19日
    浏览(51)
  • vue-element使用html2canvas实现网页指定区域(指定dom元素)截图

    直接上代码: ** 如果要截取的dom元素、区域涉及到v-if或者v-show的条件表达式时,截取的方法请在nextTick里面调用----例如: this.$nextTick(() = { this.saveImageNew() }) 否之获取dom元素的时候会获取不到!!!!!!!!

    2024年02月04日
    浏览(65)
  • 前端html2canvas生成截图【实现步骤与踩坑】

    需求 :点击下载可以导出组件的 截图 及数据信息文件 分析 :前端生成组件截图,带着其他参数传给后端,拿到excel文件并下载。关键在于生成组件的截图,这里通过 html2canvas 插件来实现。 1.下载插件 npm install html2canvas 2.引入 3.通过ref拿到要下载组件的dom元素 4.通过html2ca

    2024年04月11日
    浏览(49)
  • 前端html2canvas和dom-to-image实现截图功能

    目录 需求 历劫过程 截图知识点 html2canvas 文档地址 封装 使用教程  dom-to-image-more 文档地址 封装 使用教程 解决跨域问题 以下是我花了大把时间,薅秃头得出来的最终结果, dom-to-image-more截图时间快到可以让复杂的页面仅需2-3S就能完成截图,内容有点多,请保持耐心慢慢看

    2024年02月15日
    浏览(61)
  • vue使用html2canvas实现一键截图并赋值到剪贴板,只截取当前显示器上可视的内容

    使用 html2canvas 和 clipboard API 实现整页截图并填充至剪切板。 访问剪切板的api只支持在https或者本地localhost上使用,如果是http,则无法使用 首先需要从npm安装html2canvas 然后在代码中导入这个包: 之后绑定一个按钮来实现该功能,比如点击一个按钮,然后就开始截图当前页面并

    2024年02月15日
    浏览(58)
  • html2canvas使用文档

    Install NPM Install Yarn 以 vue 举例,这样写起来比较方便 如果想要将图片导出,可以这样写 名称 默认值 描述 allowTaint false 是否允许跨源图像污染画布 backgroundColor #ffffff 画布背景色(如果在DOM中未指定),为透明设置null canvas null 用作绘图基础的现有画布元素 foreignObjectRendering

    2024年03月28日
    浏览(56)
  • html2canvas使用指南

      最近项目中需要使用到将网页中的内容下载成图片,通过按钮点击将页面保存下来,方便同事使用进行工作汇报。如图: 然后我想到了 html2canvas ,就可以解决我现在遇到的问题了。我火速从官网下载了js文件,这里附上链接:   http://html2canvas.hertzen.com/  这里   html2canvas

    2024年02月14日
    浏览(58)
  • html2canvas 截图空白 或出现toDataURL‘ on ‘HTMLCanvasElement或img标签没截下来 的所有解决办法

    1.1以下的参数是必须要有的。 2.1这两个是解决这个报错的 3.1先设置上这个参数 3.2必须在img标签上加上这个参数 3.3最重要的一步就是必须把你的图片路径变成base64格式的,不管是网络图片还是本地图片 都不管用 必须是base64格式的, 转成了base64格式会截图很慢,所以你截图的

    2024年02月10日
    浏览(58)
  • 【前端】html2canvas生成图片空白排查data:;(js vue react uniapp)

    因为要做一个分享图,就用到了html2canvas,一开始是好好的,今天随便测了下,发现图片显示不出来了。打印了下,生成的图片链接变成了 data:; 。后面一步一步地排查,发现是页面内容太多了,删减一点内容就能显示出来。然后我又去认真看了下html2canvas的各个参数,发现可

    2024年02月03日
    浏览(59)
  • vue使用html2canvas优化---节点过滤

    当你使用html2canvas对某个节点进行截图时,项目小dom节点少那还没什么性能问题,如果是个大项目,有成百上千个dom节点,那将是非常头疼的事情(产品经理:小张啊,你这个截图功能为什么需要这个长的时间,这让客户怎么用,重新改。小张:********...)。不多bb了,直接开

    2024年02月12日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包