html2cavans 插件

news/2024/7/10 2:24:09 标签: vue

vuehtml2cavanshtmlios_0">vue移动端微信公众号项目应用html2cavans插件实现将html内容转为图片并保存到相册(实测兼容安卓,ios)

问题1:安卓端可生成图片,ios端系统在13版本以下的生成失败
解决 :修改npm html2cavans的版本

先移除之前安装的 npm uninstall html2canvas
然后安装指定版本 npm install --save html2canvas@1.0.0-rc.4

问题2:安卓端图片保存失败
解决 :将html2cavans生成的图片转为base64格式
问题3:canvas.toDataUrl()获取base64字符串表示形式,结果打印为“data:,”
解决 :可能因为页面还没渲染好,获取不到要生成图片的内容,用 nextTick 确保页面数据渲染完成
问题4:需要生成的图片内容中包含图片,产生跨域问题,生成后的图片位置为空白并报错 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource
解决 :添加配置useCORS: true + 图片中设置 crossOrigin=“anonymous” + 修改源文件(给imgUrl加上随机数)

在这里插入图片描述

以下为代码

<div id="qqq" ref="qqq" v-else>
    <img v-if="result.indexOf('cover')!=-1" :src="ItemImg" />
    <div v-if="result.indexOf('ItemName')!=-1">{{ItemName}}</div>
    <div v-if="result.indexOf('ItemDesigner')!=-1">{{ItemDesigner}}</div>
</div>

<div @click="create" class="createbutton">生成海报</div>

<van-popup v-model="dialogTableVisible" id="pop" ref="pop" @close="closePop">
</van-popup>

var opts = {useCORS: true};

create(){
	this.$nextTick(()=>{	//添加nextTick主要是加一层页面已渲染完的保障
	   html2canvas(this.$refs.qqq, opts).then(canvas => {
	       this.dialogTableVisible = true;
	       //在微信中如果不放到img标签中,canvas长按是没有效果的
	       var img = new Image();
	       img.setAttribute('crossOrigin', 'anonymous')
	       img.src = canvas.toDataURL('image/png', 1.0)
	       //转为url后路径为blob:http://xxxxxxxx,安卓端保存失败
	       //img.src = URL.createObjectURL(this.dataURLToBlob(canvas.toDataURL('image/png', 1.0))) ;
	       this.$nextTick(()=>{
	           img.setAttribute("class", "downImg");
	           document.getElementById("pop").appendChild(img);
	       })
	   })
	});
},
closePop(){
    this.showPic = false
    $('#pop').empty();
},

http://www.niftyadmin.cn/n/958029.html

相关文章

bug Error: Cannot find module ‘vue-loader-v16/package.json‘的解决办法

更新&#xff0c;命令如下&#xff0c;在 https://stackoverflow.com/questions/63504594/error-cannot-find-module-vue-loader-v16-package-json查到 cnpm i --save-dev vue-loader-v16ivyoneivyonedeMacBook-Pro daily-cost % cnpm install ⠦ [12/17] Installing source-…

文件下载、element-upload的文件手动上传

1、文件下载 调用后端接口返回文件流。前台解析 axios({method: get,url: /Download/ExportUserTemplate,headers:{Content-Type:multipart/form-data,//contenttype要设置token:token//后台要此判断权限},responseType: "blob" //必须设置&#xff0c;不然导出的文…

SpringBoot配置swagger(3.0.0)及遇到的Bug(spring-plugin-core导包冲突)

SpringBoot配置swagger&#xff08;3.0.0&#xff09;及遇到的Bug 一、swagger的配置 1、在pom.xml里添加swagger依赖&#xff0c;如下&#xff1a; <!-- 配置swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>s…

2021-04-23mysql 批量修改字段名为小写.

SELECT concat(ALTER TABLE , 表名, CHANGE COLUMN , COLUMN_NAME, , LOWER(COLUMN_NAME), , COLUMN_TYPE, COMMENT , COLUMN_COMMENT, ;) AS 修改脚本 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA 数据库名and TABLE_NAME 表名;修改数据表名为小写. SELECT con…

瀑布流 重组动画

想要通过js原生写&#xff0c;后来知道了vue还有个自带动画 进入/离开 & 列表过渡&#xff0c;看实例 这个可以说非常方便了&#xff0c;且非常符合我这个动画需求 首先需要把初始静态布局写好&#xff0c;一开始是通过position定位后动态给每个标签赋值height&#xff0c…

eclipse/idea批量替换空白行空行

批量替换空行 CtrlF 快捷方式打开Find/Replace工具窗 选择Regular expression项&#xff0c;允许查询匹配正则表达式 在Find文本框输入正则表达式&#xff1a;^\s*\n 点击ReplaceAll 转移字符含义^否*0个或多个\s 字符串\n换行(LF) &#xff0c;将当前位置移到下一行开头故&am…

使用element的DateTimePicker报错Error in render: “TypeError: date.getFullYear is not a function“

编辑数据时&#xff0c;点击清空时间重新选中都没什么问题&#xff0c;但一点击显示的时间准备修改就会报错 看了type&#xff0c;格式都没什么问题 原因&#xff1a;后端数据返回时是string格式&#xff01;&#xff01;所以会报以上错误 解决&#xff1a;将v-model绑定的时间…

IDEA 编译项目时报:GC overhead limit exceeded解决方法

1.问题简述 在Intellij IDEA下编译Java项目&#xff0c;报错&#xff1a;java.lang.OutOfMemoryError: ...(此处忽略) GC overhead limit exceeded 2.问题分析 错误是发生在编译阶段&#xff0c;而不是运行阶段。通过查询相关资料发现&#xff0c; 1.idea编译Java项目使用的虚…