您现在的位置是:网站首页> 编程资料编程资料
前端Html5如何实现分享截图的示例代码HTML5中外部浏览器唤起微信分享功能的代码html5 canvas手势解锁源码分享HTML5中外部浏览器唤起微信分享Html5页面二次分享的实现微信端html5页面调用分享接口示例详解html5 canvas 微信海报分享(个人爬坑)利用HTML5 Canvas制作键盘及鼠标动画的实例分享使用纯HTML5编写一款网页上的时钟的代码分享使用html5 canvas 画时钟代码实例分享HTML5图片预览实例分享
2021-08-30
1331人已围观
简介 这篇文章主要介绍了前端Html5如何实现分享截图的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言
这篇文章主要是介绍如何使用canvas实现分享截图,
刚开始以为通过canvas绘画分享图片并不难,但实际上在开发的时候还是遇到非常多的坑
例如:
①图片背景为透明
②分享图只有文字没有图片
③图片跨域问题
下面看例子:
分享图片、分享内容描述、标题、二维码都是通过请求接口动态生成

实现:一、body部分
框架我使用的是react。绘画分享采用原生canvas、js实现。所以不用担心vue、小程序、原生H5也是能够适应。
一、构建canvas
下面展示一些 内联代码片。
//ref是react获取canvas元素的方法。也可以使用id,再通过getElementById() 方法获取canvas //宽高需要转化为而二-四倍图来提高清晰度、否则会导致分享截图模糊,清晰度不足
//点击分享按钮触发this.shareComponent(this.getUrlImg)方法 //非react框架,忽视其余代码。直接触发分享函数{ this.setState({ shareModal:true },()=>{ this.shareComponent(this.getUrlImg) })} }>分享活动
实现:二、JS部分:
shareComponent函数
//函数接受一个回调函数,用于绘画完成后,再将canvas转化为png图片格式。 //canvas移动端无法长按保存,必须传为img才能保存。 shareComponent = (callback)=>{ let suncode = this.state.suncode //微信小程序太阳码 let activityName = this.state.activityName //活动标题 let backgroundImg = this.state.backgroundImg //背景图 let postShareDesc= this.state.postShareDesc //分享描述字段 let img = new Image() img.crossOrigin="anonymous"; //关键,处理图片跨域问题!! let _t = this //限制活动标题,最多10个字,超过...省略 if(activityName.length>10){ activityName=activityName.slice(0,10)+'...' } //由于canvas文字不能自动换行,所以我们这里需要做一个文字换行处理,以及字数的限制,防止超出canvas范围 let arrDescribe = [] let maxLeng = postShareDesc.length/20 //分享描述每行20字,最多8行 if(maxLeng=>8){ maxLeng = 8 //最多8行 } //postShareDesc为分享描述字段 for(let i = 0;i{ ctx.fillText(item,80,700+index*100); }) //分享标题 ctx.font="64px Arial"; ctx.fillStyle='#000'; ctx.fillText(activityName,520,1320); //分享提示 ctx.font="48px Arial"; ctx.fillStyle='#999'; ctx.fillText('长按小程序码查看详情',520,1420); //分享提示 ctx.font="48px Arial"; ctx.fillStyle='#999'; ctx.fillText('分享自[XXXX]',520,1500); //分割线 ctx.moveTo(1120,1160); ctx.lineTo(80,1180); ctx.strokeStyle="#E8E8E8" ctx.stroke(); //img1为小程序太阳码 let img1 = new Image() img1.crossOrigin="anonymous"; //关键,处理太阳码转化为base64格式图片时的跨域问题 img1.onload = function(){ ctx.drawImage(img1, 80, 1200,340,340) callback(canvas) } 太阳码赋值给img1 img1.src = suncode //边框 ctx.strokeStyle="#f5f5f5"; ctx.rect(0,0,1200,1600); ctx.stroke(); } //timeStamp 事件属性可返回一个时间戳。指示发生事件的日期和时间(从 epoch 开始的毫秒数)。 //URL时间戳的用法:作用:为了防止浏览器缓存。 //URL后面添加随机数或时间戳通常用于防止浏览器(客户端)缓存页面。 浏览器缓存是基于URL进行缓存的, //如果页面允许缓存,则在缓存时效前再次访问相同的URL,浏览器就不会再次发送请求到服务器端,而是直接从缓存中获取指定资源。 //而当URL 的末尾追加了随机数或时间戳,就会保证每次都会实际生成新请求且 Web 服务器不会尝试缓存来自服务器的响应。 const a = `${backgroundImg}?timeStamp=` + (new Date()); img.src = a } //绘画完成后,必须转化为img,否则移动端将会无法长按保存 //必须等绘画完成后,才能够回调。如果直接使用canvas.toDataURL('image/png')转化,会导致出现分享图只有写死的文字,没有请求的图片和文字。会存在异步问题 getUrlImg=(canvas)=>{ let dataImg = new Image() try { dataImg.src = canvas.toDataURL('image/png') } catch (e) { console.log(e); } let urlImg = dataImg.src //urlImg为img路径 this.setState({urlImg},()=>{ }) } 实现:三、canvas更换imgs
//最后必须将canvas隐藏,再替换为imgs,这样移动端才能长按保存 //css中.canvasImg添加display:none隐藏画布 //再使用canvas转化的img,并且将img的宽高设置为25% //因为为了提高清晰度,我是采用四倍图再压缩的方式来提高清晰度,所以img需要缩回25%
总结与优化
难点在于:
①将canvas转化为base64格式图片,会导致图片跨域问题
②异步问题(图片还未加载,绘画就已经完成)
③背景透明的问题等等
优化:
①清晰度:可以将canvas画成2-4倍图,转化为图片再压缩回50%-25%
②分享图加载速度:小程序二维码太阳码,背景图等页面加载阶段可以先请求,点击分享按钮可以直接绘画,减少请求时间长导致生成绘画慢问题,同时也可以避免二维码、背景图未加载完成,绘画就已经开始,导致画出来的分享图没有背景图、二维码的问题。
到此这篇关于前端Html5如何实现分享截图的示例代码的文章就介绍到这了,更多相关Html5分享截图内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- html5实现可拖拽移动的悬浮图标的示例代码HTML5中在title标题标签里设置小图标的方法HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
- html+css实现图片扫描仪特效 html+css实现充电水滴融合特效代码html+css实现血轮眼轮回眼特效代码
- HTML5数字输入仅接受整数的实现代码html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- Html5移动端div固定到底部实现底部导航条的几种方式使用HTML5做的导航条详细步骤CSS导航条菜单之带小三角形的实现代码使用CSS3制作倾斜导航条和毛玻璃效果CSS实现导航条Tab切换的三种方法介绍CSS实现五颜六色按钮组成的导航条效果代码纯CSS实现的紫罗兰风格导航条效果代码DIV+CSS实现仿京东商城导航条效果用CSS手写导航条没有任何图片附效果图二个简单的菜单导航条示例css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
- HTML5拖拽文件上传的示例代码html5拖拽排序多图片上传插件特效源码HTML5 拖拽批量上传文件的示例代码html5实现多图片预览上传及点击可拖拽控件html5使用Drag事件编辑器拖拽上传图片的示例代码HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)HTML5 canvas实现移动端上传头像拖拽裁剪效果结合html5+nodejs+express实现拖拽上传的功能HTML5拖拽文件到浏览器并实现文件上传下载功能代码html5 拖拽上传图片实例演示
- html5使用window.postMessage进行跨域实现数据交互的一次实战详解HTML5 window.postMessage与跨域
- html5表单的required属性使用wordpress添加Html5的表单验证required方法小结html5的input的required使用中遇到的问题及解决方法html5中valid、invalid、required的定义
- html5调用摄像头实例代码Html5调用手机摄像头并实现人脸识别的实现html5调用摄像头功能的实现代码HTML5混合开发二维码扫描以及调用本地摄像头HTML5调用手机摄像头拍照的实现思路及代码HTML5 Canvas+JS控制电脑或手机上的摄像头实例
- HTML5页面音频自动播放的实现方式html5 video全屏播放/自动播放的实现示例html5中嵌入视频自动播放的问题解决html5自动播放mov格式视频的实例代码解决HTML5中的audio在手机端和微信端的不能自动播放问题HTML5 解决苹果手机不能自动播放音乐问题有关HTML5中背景音乐的自动播放功能HTML5页面音视频在微信和app下自动播放的实现方法
- Html5大屏数据可视化开发的实现html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
