uniapp移动端生成分享海报并下载的实现及遇到的坑uniapp移动端使用html2canvas实现自定义海报生成以及下

这是一个很普通的需求,但是没想到让我遇到了一个大坑(后面细说),卡了我整整一天的进度。

一开始想着用HBX的海报插件来实现,然后发现这些海报插件,要么是不适配vue3,要么是可定制性不够高,只能按照它写好的模板进行替换,再或者就是要去其他网站用在线海报编辑器编辑好了之后,再生成配置文件,有点麻烦。简单的说就是,要么用不了,要么不好用。

于是便想着通过html2canvas来自己实现。

新建一个组件.vue文件,然后在里面搭建页面结构,引入几张图片,得到下图。

页面结构如下:

npmihtml2canvas--save因为html2canvas要操作DOM元素,因此这里我们要用到renderjs,根据uni官方文档的说明,我们在文件中新增一对script标签,如下:

此时我们组件中存在两个script标签,如下:

除此之外,renderjs还有挺多注意事项的,建议大家遇到问题了先去官方文档中查看这些注意事项,比如说:

我们在视图层引入html2canvas,然后在其methods属性中定义一个toImage异步方法,该方法代码如下:

asynctoImage(){ try{ consttimeout=setTimeout(async()=>{ consthtmlCanvas=document.getElementById('htmlCanvas') constcanvas=awaithtml2canvas(htmlCanvas,{ backgroundColor:null, allowTaint:true, useCORS:true }) constbase64Data=canvas.toDataURL('image/png') this.$ownerInstance.callMethod('creates',base64Data) clearTimeout(timeout) },500); }catch(e){ console.log(e); }}图片跨域toImage的定时器一定要加上的,不然的话会有问题,然后就是获取DOM,使用html2canvas,然后通过toDataURL获取图片的base64数据,一切都好像很顺利,直到我运行的时候,控制台出现这行红字:

Uncaught(inpromise)SecurityError:Failedtoexecute'toDataURL'on'HTMLCanvasElement':Taintedcanvasesmaynotbeexported.atapp-renderjs.js:7906简单的说,就是canvas引入的图片跨域了,导致画布被污染,所以不能使用toDataURL这个方法导出数据了,于是我赶紧查看html2canvas的文档,发现有两个配置项与这个有关:

我将这俩配置项都设为true之后,再运行,哦豁,还是同样的错误。

赶紧上网咨询广大网友,得到的方法是:

首先第一个方法,不是很ok,因为后端比较忙,而且就3张图片,我也实在是懒得叫。然后第二个方法,好像可以,但是又瞬间清醒,我用的是image标签,不是img标签,在移动端使用img标签会不显示图片的,最后抱着希望跑去uni官网看看image标签会不会有这个属性:

很可惜,没有。

难道真的要去麻烦后端了吗!不不不,要不咋说网友是万能的呢,翻了十几页搜索结果之后,终于在一篇帖子中找到了,这位仁兄也遇到了同样的困境,canvas跨域,然后没有后端帮忙,他给出的解决方案如下:

二话不说,我直接就跑去把用到的图片转成了base64,然后封装成组件:

然后重写改写模板结构:

这个方法的逻辑很简单,将base64数据转换成tempFilePath,然后调用uni.saveImageToPhotosAlbum将图片保存到用户相册即可。

如何将base64数据转换成tempFilePath呢,网上教的都是转成blob,但是这在uniapp的移动端中不适用啊,网上搜不到,我就去插件库中抄一下,看看它们是怎么实现的,嘿,当我打开LimeEchart的目录的时候,很快就让我在一个utils.js文件中翻到了一个名为base64ToPath的工具函数,啥也不说,直接复制:

/***base64转filePath*@param{Object}base64*/exportfunctionbase64ToPath(base64){ returnnewPromise((resolve,reject)=>{ const[,format,bodyData]=/data:image\/(\w+);base64,(.*)/.exec(base64)||[]; constbitmap=newplus.nativeObj.Bitmap('bitmap'+Date.now()) bitmap.loadBase64Data(base64,()=>{ if(!format){ reject(newError('ERROR_BASE64SRC_PARSE')) } consttime=newDate().getTime(); constfilePath=`_doc/uniapp_temp/${time}.${format}` bitmap.save(filePath,{}, ()=>{ bitmap.clear() resolve(filePath) }, (error)=>{ bitmap.clear() console.error(`${JSON.stringify(error)}`) reject(error) }) },(error)=>{ bitmap.clear() console.error(`${JSON.stringify(error)}`) reject(error) }) })}然后就可以接着实现creates方法了:

creates(base64Data){ uni.showLoading({ title:'下载中', }) base64ToPath(base64Data).then(filePath=>{ uni.saveImageToPhotosAlbum({ filePath, success:()=>{ uni.hideLoading() uni.showToast({ title:'图片下载成功', mask:false, duration:1500 }); } }); })}到这里,基本上没有问题了,然后我就开了模拟器,进行了一波真机运行,确实很ok。

本次遇到最大的坑来了,上面是我在一个demo项目中实现的(编译快),然后我将其移动到正式项目中去。

于是乎,我给下载图片按钮绑定了一个逻辑层的方法,然后想这个方法中调用视图层的方法:

为了弄明白到底是什么原因导致的点击事件触发,我决定使用排除法。

首先我直接把demo项目中的这个功能直接整个复制到了正式项目中去(覆盖掉该模块的其他代码),然后运行,发现是可以下载图片的,也就是说,功能确实是没有问题的。

然后我开始恢复页面样式(既然功能没问题,那我把页面也恢复,那这个需求不就解决了吗),恢复的过程中,我发现猫腻了,因为这个项目中很多地方都用到了天空和海平面作为背景图,然后这俩还是分开的,于是我之前封装了一个页面容器组件pageContainer,然后这个组件的插槽部分就是页面内容了,这样就不用我每个页面都重新写背景了。

当我使用pageContainer包裹页面内容的时候,视图层的方法就无法被触发。

又换回了html2canvas,结果又卡在了视图层事件不触发这上面,关键是,它不报错,点击之后啥反应都没有,人家逻辑层起码还抛一个notafunction出来,然后文档中没有提到过这个(可能是那句只支持内联?),社区中也没有,网上还找不到。

THE END
1.可以生成海报的APP推荐可以生成海报的下载豌豆荚可以生成海报的榜单为您提供最新可以生成海报的大全,这里不仅有可以生成海报的安卓版本APP、历史版本应用下载资源,还有类似可以生成海报的的应用推荐,欢迎大家前来豌豆荚下载。https://www.wandoujia.com/bangdan/763918/
2.制作海报的软件app排行榜前十名偏玩手游盒子分享十大制作海报的软件app排行榜前十名手机应用,编辑为您推荐手机制作海报的软件app排行榜第一名到前5名到前十名的应用。找制作海报的软件app有哪些、制作海报的软件app哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-1305178
3.免费制作海报的APP,这5个就够了第一个推荐的可以免费制作海报的 APP 是即时设计,它是一款国内自研的在线协作式海报制作工具,设计团队成员可以同时编辑、评论和查看设计进度,提高工作效率。即时设计的操控界面是全中文且十分清晰的,设计小白也可以轻松上手。目前拥有 Windos、Mac、Android、iOS等 多个系统的网页端和客户端版本,无需下载打开网页就能使https://js.design/special/article/app-for-making-free-posters.html
4.在线海报生成app哪里可以做?技术博客在当今社交媒体和网络营销中,视觉呈现和图像传播发挥着越来越重要的作用。在线海报生成大淘客网站怎样生成appApp满足了这一需求,提供一个简单、快捷的方式,让用户能够轻松地制作各种各样的海报、横幅、封面等营销素材。本文将为您详细介绍在线海报生成App的原理及一些热门应用推荐。 https://www.yimenapp.net/knowledge/blog-15169.html
5.海报生成器海报自动生成app海报生成器【海报自动生成app】 想设计海报,但是又嫌ps制作太繁琐,推荐10个简单实用的在线平面设计网站,用过就离不开的那种!就算是小白,也能设计出精美时尚的海报。 01 创客贴 https://www.chuangkit.com/?dontjump=1 创客贴是一款多平台(Web、Mobile、Mac 、Windows)极简图形编辑和平面设计工具,包括创客贴网页https://www.wandongli.com/news_detail.html?id=20723
6.在线海报制作app海报制作app生成海报制作app图片模板想要快速制作专业海报?只需1分钟,用在线海报制作APP,让创意瞬间呈现!无论是宣传活动、社交媒体帖子还是品牌广告,这些APP都能轻松满足你的需求。打开应用,选择一个你喜欢的海报模板,平台内置丰富的设计元素,供你随心所欲地调整和编辑。无论是更换背景、添加文字还是https://rrx.cn/content-4j0sm2
7.web在线生成app好用的网站推荐一门Web在线生成App好用的网站与详细介绍创建一个原生应用程序需要大量时间、资源和开发技能。但是,有一些在线工具允许你将你现有的Web内容转换为移动应用程序,无需编程知识。下面列出了一些在线生成App Web在线生成App好用的网站与详细介绍 创建一个原生应用程序需要大量时间、资源和开发技能。但是,有一些在线工具允许你将你https://www.yimenapp.com/kb-yimen/26774/
8.海报生成app哪个好素材网站图片免费下载潮流插画艺术海报系列|—aigc实战案例生成应用 1 zb浅色调 图片海报广告在线设计编辑生成神器小程序开源版开发 3 cc_gc ai快速生成多风格双11海报(全流程拆解,提示词分享) 10 南墙_rylee aigc人像生成-万圣节海报 4 晓晓的小小爱 app宣传动画 |二维动画 | ai自助生成童话故事 22 卡拉廖动画师 用ai绘画生成海报https://www.zcool.com.cn/tag/ZMTA0MDMxOTI=.html
9.小程序uniuniapp中使用html2canvas做H5端的海报生成功能 - 简书 uni-app 中使用 html2canvas 生成图片(支持多端)_uniapp html2canvas_不想搬砖。的博客-CSDN博客 uni-app APP、html引入html2canvas截图以及截长图_html2canvas npm-CSDN博客 uni-app 中使用 html2canvas 生成图片(支持多端)_uniapp html2canvas_不想搬https://blog.csdn.net/snowball_li/article/details/133801504
10.装逼在线生成器在线免费生成各种装逼图片,装逼在线生成器,凡尔赛图片,火车票生成器,装逼神器小助,装逼助手,整蛊专家,一键生成朋友圈装逼图片。http://zb.yuanrenbang.com/
11.ai设计海报ai海报一键生成输入一句话自动生成海报设计ai设计海报一键生成 创客贴AI海报设计工具,只需输入一句话,即可生成不同尺寸和场景的海报设计,包含横版海报,招聘海报,每日一签,电商主图,小红书配图等,支持在线编辑修改,免费下载。用ai做海报竟然如此简单! 招聘海报 每日一签 人物宣传 小红书配图 电商主图 https://www.chuangkit.com/adlp2/339.html
12.稿定设计在线设计平台海报设计图片设计视频编辑海量设计模板加持不会PS也能轻松搞定设计,在线设计海报、简历、PPT、名片、宣传单、邀请函、Logo等多种设计需求场景,3秒抠图、批量套版、AI辅助设计实用便捷。海量正版授权资源,商用无忧。https://www.gaoding.com/
13.Logo设计大师- 仅需几步,logo自动生成 - 支持高清导出 - 3000+多元徽章元素 - 海量创意模板 - 独特个性化字体 - 数百个特色背景 - 无限任意组合 - 易于操作的界面 您可以使用Logo设计大师创建的徽标做什么? - 为您的公共照片,游戏截图,传单,标签或其他图像添加水印 https://apps.apple.com/cn/app/logo-maker-watermark-designer/id1414089730?l=cs
14.免费海报在线制作app一键生成标签:免费海报在线制作app一键生成 把一个网页生成app有哪些方法? 在这篇文章中,我们将讨论如何将一个网页生成为一个应用程序(通常被称为Web应用)。这个过程可以让网站成为一个可在移动设备、桌面甚至是即将到来的平台上运行的独立应用。接下来,我们会详细介绍这个过程和原http://www.yimenapp.cn/yun/tag/%E5%85%8D%E8%B4%B9%E6%B5%B7%E6%8A%A5%E5%9C%A8%E7%BA%BF%E5%88%B6%E4%BD%9Capp%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90/
15.强大的在线海报图片设计器,仿稿定设计。适用于海报图片生成一款漂亮且功能强大的在线图片设计器,仿稿定设计,适用于多种场景:海报生成、电商产品图、文章长图、视频/公众号封面等,让设计更简单!A beautiful online image designer, suitable for various scenarios like generate posters, making design easier. - palxiao/posthttps://www.bandianxiang.com/info/YvnXpjU
16.海报制作哪个软件好2024海报制作软件免费版海报制作哪个软件好?小编为大家带来实用的海报制作app,可以帮助用户完成海报制作的工作,还提供各种专业的制作功能,各种精美的海报模板可以使用,此外还能够自由拼接图片,一键生成长图海报,有需要的用户可以免费下载哦。0 共23款软件Logo设计大师 分类:系统工具时间:2024-10-09 Logo设计大师APP是能免费设计Logo的软件,https://www.doyo.cn/zhuanti/hbzz/
17.美间设计在线软装设计工具美间(www.meijian.com)是专注于家居设计营销谈单的网站,在线软装设计工具,10秒搞定设计方案。美间同时还免费提供海量正版设计素材、软装和提案PPT模板、海报模板等。美间,让设计更简单,更高效!https://www.meijian.io/
18.连iPhoneX都有!一秒生成网站/App展示模板图的在线神器一秒生成网站/App展示模板图的在线神器 编者按:今天给大家介绍的这两个网站,可以让你直接在线预览设计稿在不同设备上的效果,还有iPhone X 的展示素材哟! MockUPhone 这个工具提供 iOS、Android、Windows Phone、平板、笔记本电脑、桌机和电视在内等众多设备的模型(Mockup),包括最新的 iPhone X、iPhone 8 及 Googlehttps://www.uisdc.com/mockuphone-dimmy-club
19.美图设计室智能生成海报一键生成美图设计室是美图秀秀旗下的智能设计在线协作平台,是一款平面设计工具和在线平面设计软件,提供海量海报模板,跨境电商模板,跨境电商banner,跨境电商主图,邀请函,公告通知,喜报,logo等免费设计素材和模板,可在线智能生成海报,一键换色,一键换装,一键去水印,图片高清修复,无损https://design.meitu.com/
20.美寄词云官网美寄有着多款在线图片处理神器,如文字词云,照片加曲线文字,古风家书,窗花剪影生成器,在线P图,在线智能AI抠图,免费书法字体,图片去水印,花样裁图,满足您对图片处理的各种需求https://www.moage.cn/
21.易企秀免费H5模板AI在线设计海报视频数字人易企秀创提供免费H5微场景、海报、长图、表单、视频、互动游戏、画册、数字人、建站、小程序等制作工具及企业微信私域数字智能营销平台,助力企业高效完成内容创意、传播获客、数据管理、效果转化的自营销闭环。https://www.eqxiu.com/
22.图怪兽作图神器在线海报编辑器PS图片制作图怪兽作图神器,是一个在线ps图片编辑器,它相当于ps精简版软件,可提供微信编辑器功能,在线ps照片处理,拼图,图片制作,在线设计,平面设计,海报设计,在线图片处理等功能。图怪兽作图不求人处理简单易用,这款在线图片编辑软件让设计海报模板图片更轻松,帮助企业视觉营销投入成本http://www.pikhive.com/
23.快设计海报制作神器创意工具在线稿定平面设计手机海报 不同类型,丰富设计模板 手机海报 海外电商素材 长图海报 PC端banner 微信公号封面首图 微信公号方形封面 日签 淘宝商品主图 电商横版海报 红色渐变风好友助力提现红包手机海报 大红色喜庆挂历风吉祥如意新年海报 红色创意风元旦手机海报 红色国潮风除夕手机海报 https://sheji.tuchong.com/
24.海报设计免费在线设计制作海报精美海报模板素材下载MAKA是全球最好用的免费在线海报设计软件、海报制作工具、海报设计生成器之一,精选优质海报设计模板素材图片、字体及背景,5分钟完成在线设计制作创意宣传海报、公益海报、电影海报、促销活动海报。https://www.maka.im/zhinan/haibaosheji
25.海报制作海报生成器免费海报模板Canva可画免费海报制作工具,拖拽式操作简单易上手,免费模板导出图片无水印,还有丰富的海报模板和海报素材可供选择,助你轻松在线制作出精美的海报!https://www.canva.cn/posters/
26.免费一键生成app工具,生成app喵爪二维码制作助手是一款可以帮助用户制作精美二维码的软件。用户可以在平台上选择自己喜欢的模板,不同风格的模板有很多,用户可以随意选择。在生成过程中,支持同时添加多种内容进行生成,处理速度非常快,操作方便。 03010软件亮点: 1.这是一款非常专业的二维码生成软件,用户可以在这个软件上生成自己想要的二维码海报。 https://www.isharead.cn/news-2170.html
27.免费试用收费介绍效果评测官网入口及在线体验APP用户普遍反馈OneStory在提高创作效率和简化分镜脚本制作流程方面表现优异。特别是对于缺乏专业美术背景的用户,该平台提供的图像生成和编辑功能非常实用。此外,OneStory的分镜脚本生成功能被评价为极大地加快了前期准备工作,使得创作者能够更加专注于内容的情感表达和视觉效果的优化。 https://www.ai138.com/?p=4362
28.营销海报—活动海报制作—海报模板—海报在线制作—免费试用有赞活动海报功能一键就可生成高颜值活动海报,分发推广,实现高效曝光转化。无需美工和专业设计,简单几步就能自己制作海报,覆盖砍价、拼团、优惠券、公众号涨粉等多种营销活动。https://www.youzan.com/chanpin/huodonghaibao.html