canvas 实现图片局部模糊_小技巧!H5使用Html2Canvas实现自动截屏(下)

上文写到使用html2Canvas实现截屏。上次留了一个问题,如果当前dom元素对象比较大,比如包含一个比较大的图片等,在将dom序列化成字符串时,极易导致字符串超长。对于超长的内容,后台程序将获取不到参数,那么怎么解决这个问题呢?基本实现思路有三种:1、对dom里的元素瘦身,减少序列化后的参数值长度。存在问题:对于无法再瘦身的dom怎么办?怎么体现通用性(一段代码解决大多数场景)?2、修改web中间件的上传大小限制。存在问题:对web中间件依赖增强,如果需要跨中间件则非常麻烦,通用性太低。3、采用文件上传的思路绕过传统form参数限制。优点:只需要修改表单提交方式,完全实现分离,支持所有平台。缺点:需要前后台支持文件的读写与转换,不过这个成本几乎可以忽略不计。具体实现一、瘦身伪码,思路就是尽量最小化需要序列化的dom元素。
document.getElementById('helpPage').style.display= 'none';//设置隐藏document.getElementById('helpPage').remove();//删除元素
二、设置服务中间件参数限制,以tomcat为例。
tomcat7.0.63之前的版本maxPostSize 设置为 0 或者负数Connector 节点中加入maxPostSize="0"  或者  maxPostSize="-1" tomcat7.0.63之后的版本,需要设置为负数Connector 节点中加入 maxPostSize="-1" 
  • 在tomcat文件夹下的conf文件中的server.xml 配置中添加:

  • maxPostSize="-1"   //-1 表示不限制大小

  • maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152。

三、前端序列化成file,使用文件上传的方式提交后台。前台基本代码如下:
function saveAsImageData(){     var userTemplateId = parent.window.templateId;     var pic,dataUrl ;     var canvas2 = document.createElement("canvas");           //创建一个新的canvas     let _canvas = document.querySelector('#main');      //这里面填写 你需要截图的div     var w = parseInt(window.getComputedStyle(_canvas).width);     var h = parseInt(window.getComputedStyle(_canvas).height);     canvas2.width = w;     canvas2.height = h;              //将canvas画布放大2倍或者更多,然后盛放在较小的容器内,就显得不模糊了     canvas2.style.width = w + "px";     canvas2.style.height = h + "px";     var context = canvas2.getContext("2d");     context.scale(1, 1);       //指图片偏移     html2canvas(document.querySelector('#main'), {    //写需要截图的div         taintTest: false,useCORS: true,allowTaint: false,   //这三串代码解决跨域问题         canvas: canvas2     }).then(         function (canvas) {            dataUrl = canvas.toDataURL("image/png");            var arr = dataUrl.split(',')            var mime = arr[0].match(/:(.*?);/)[1]            var suffix = mime.split('/')[1]            var bstr = atob(arr[1])            var n = bstr.length            var u8arr = new Uint8Array(n)            while (n--) {              u8arr[n] = bstr.charCodeAt(n)            }            var file =  new File([u8arr], `temp_img.${suffix}`, {type: mime});            var formdata = new FormData();            formdata.append("file",file)             $.ajax({                 url: url,//路径                  type: "POST",                 data: formdata,                 contentType: false,                 multiple: true,                 processData: false,                 success: function (data) {                 },                 error: function (error) {                 }               });         });}
后台代码如下:
@RequestMapping("fileUpload2")    public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {         long  startTime=System.currentTimeMillis();        System.out.println("fileName:"+file.getOriginalFilename());        String path="E:/"+new Date().getTime()+file.getOriginalFilename();        File newFile=new File(path);        file.transferTo(newFile);        return "/success";     }
本文阐述了在使用html2Canvas时,遇到序列化字符太大无法完成提交的问题的解决方案。分析了各个方案的适用场景和具体实现思路。当然可能还有更好的实现方式,欢迎交流讨论。

5accd7a17db8af08140d70e03ac794b9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

getjson php 函数,PHP读写JSON文件以及jQuery的getJSON函数用法

在写的音乐网站中用到保存用户歌单功能,即用户登录后可以显示该用户之前保存的歌单,开始的思路是使用数据库来保存,后来为了方便于是考虑使用json数据格式来保存歌单,这样也和播放器插件的json参数比较契合.读取JSON文件<?php $filename "chation99.json";$json…

悬而未决的AI竞赛:全球企业人工智能发展现状

来源&#xff1a;德勤,智东西随着企业领袖逐渐将人工智能视为下一轮经济大扩张的重要推动力量&#xff0c;一种担忧错失良机的情绪在全球范围内日益蔓延。许多国家纷纷制定人工智能战略&#xff0c;通过资金投入、政策激励、人才发展和风险管理推进技术能力的发展。人工智能对于…

Science揭示:身体如何应对细菌的“群体感应”

电子显微镜下的假单胞菌细菌。图片来源&#xff1a;MPIIB / Volker Brinkmann来源&#xff1a;中国生物技术网众所周知&#xff0c;细菌感染并不会马上导致疾病&#xff0c;只有在它们大量出现时才会对身体造成威胁。近日&#xff0c;发表在《Science》上的一项研究中&#xff…

百度:2020年十大科技趋势

来源&#xff1a;6G俱乐部图片来源&#xff1a;百度2019&#xff0c;关于科技的鲜活记忆&#xff0c;正在快速变成时间洪流的一部分&#xff0c;也变成了我们读懂未来的钥匙。过去一年中&#xff0c;多技术融合正在加快&#xff0c;AI开发的门槛在迅速降低&#xff0c;产业智能…

美国计划让“人工智能”去搜寻外星人!

来源&#xff1a;科学解码据美国太空网近日报道&#xff0c;美国国家航空航天局&#xff08;NASA&#xff09;官员称&#xff0c;他们希望利用人工智能&#xff08;例如机器学习&#xff09;技术&#xff0c;分析大型望远镜等收集的数据&#xff0c;从而帮助搜寻外星生命&#…

三宝机器人怎么充电_巨人通力导致吉祥三宝+36号故障怪现象的又一因素

想必大家都有过这样的经历&#xff1a;在电梯故障频繁出现时&#xff0c;明明可以判断是哪里的问题&#xff0c;但事实却是让你感觉不可思议&#xff0c;并且排查过程颇为周折。今天和大家分享一下我经历的巨人通力GPS30K电梯出现的吉祥三宝故障的排查过程。下图为电梯控制柜铭…

《自然》展望2020年重大科学事件!中国有两个大计划安排上了

来源&#xff1a;科技日报图片来源&#xff1a;Nature官网&#xff08;不包括标注了来源的图片&#xff09;“千门万户曈曈日&#xff0c;总把新桃换旧符”&#xff01;在辞旧迎新之际&#xff0c;我们除了要埋头梳理过去一年的悲欢得失&#xff0c;也应抬头眺望新一年的星辰大…

vue aplayer 进度条无法拖动_Vue-rideo-player视频播放插件的使用

***** git项目地址&#xff1a; https://github.com/surmon-china/vue-video-player***** 参考文章&#xff1a; https://www.jianshu.com/p/532fc1d8c90c使用安装&#xff1a; npm install vue-video-player --save2. 在main.js入口文件中引入import VideoPlayer from vue-vid…

php流程控制作业题,php流程控制

一、get传值我们请求服务器下一步操作啊&#xff0c;都是用get进行传值&#xff0c;然后服务器用预定义变量数组$_GET&#xff0c;接受。二、流程控制1 三元运算符 ? :逻辑很简单&#xff0c;就是设置条件&#xff0c;条件成立就执行“&#xff1f;” 。条件不成立就执行”:…

JS中的call()和apply()方法(转)

转自&#xff1a;http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类&#xff1a; JS1、方法定义 call方法: 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象…

中国AI芯片产业发展白皮书:未来三年年均增长率超50%

来源&#xff1a;赛迪顾问《中国AI芯片产业发展白皮书》从AI芯片的定义及分类、发展过程与现状、应用机会、竞争格局、发展趋势等多角度全面剖析AI芯片的发展新态势、 技术演进及行业格局&#xff0c;旨在为业内相关企业把握行业发展动态、挖掘市场机遇&#xff0c;提供借鉴与参…

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源&#xff1a; IEEE电气电子工程师尽管大肆宣传&#xff0c;人工智能仍需数年时间才能显著提高经济生产力。2016年&#xff0c;总部位于伦敦的Alphabet&#xff08;也是谷歌的母公司&#xff09;的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…

张恭庆院士:数学的意义(最全最牛的解释)

来源&#xff1a;数学严老师北京大学数学科学学院教授、中国科学院院士、第三世界科学院院士数学既是一种文化、一种“思想的体操”&#xff0c;更是现代理性文化的核心。马克思说&#xff1a;“一门科学只有当它达到了能够成功地运用数学时&#xff0c;才算真正发展了。”在前…

oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件

最近有需求要导出一个专业的详单&#xff0c;用于倒入sqlserver系统&#xff0c;要求用分隔符隔开各字段。一开始准备用toad查询出来在save as&#xff0c;但发现表太多&#xff0c;要一张一张表盯着&#xff0c;而且由于详单数据量大&#xff0c;查询导出占用了大量的客户端内…

vue mxgraph渲染xml页面_Vue的两个版本

Vue.js分为两个版本&#xff0c;简单来说就是一个是完整版vue.js&#xff0c;一个是非完整版vue.runtime.js&#xff1a;1. HTML的书写位置不同完整版&#xff1a;完整版的HTML书写的位置有两个&#xff0c;一个是直接在 *.html 文件中使用 Vue 语法&#xff0c;如下所示&#…

美智库发布报告:《美国在人工智能时代的行动蓝图》

来源&#xff1a;新美国安全中心12月17日&#xff0c;新美国安全中心发布报告《美国人工智能世纪&#xff1a;行动蓝图》&#xff0c;指出先进计算、量子科学、人工智能、合成生物学、5G、增材制造等技术的快速进步正在改变技术运行机制&#xff0c;其中人工智能将产生最广泛的…

四则运算01

编写随机生成30道小学数学题目&#xff1a; 源代码&#xff1a; package test; public class lianxi {String f(){int i (int)(Math.random()*10);int j (int)(Math.random()*10);if(i>j){int temp i;i j;j temp;}return ("("i"/"j")")…

2019-2021年中国AI芯片市场预测与展望数据

来源&#xff1a;赛迪顾问预计未来三年AI芯片市场规模仍将保持50%以上的增长速度&#xff0c;到2019年中国AI芯片市场规模将达到124.1亿元。从细分市场结构来看&#xff0c;云端训练芯片的比例仍然最大&#xff0c;但增速最慢&#xff0c;云端推断芯片与终端推断芯片市场在未来…

java. oracle 存储文件,oracle调用java类遍历磁盘文件

利用oracle自带的utl_file包可以访问磁盘文件&#xff0c;但有个限制--无法访问文件夹&#xff1f;什么意思呢&#xff1f;就是说oracle只能访问指定的文件&#xff0c;而不能访问文件夹下的未知文件。所以&#xff0c;如果要通过oracle去遍历某指定路径下的所有文件&#xff0…