html2canvas 把h5网页保存为图片

想把一个网页得某些元素,绘制成图片保存,有些数据是接口动态加载的,所以不能UI给到图片,需要我们把api的数据也绘制到图片上

html2canvas这个插件可以完美解决,以下是使用方法和一些坑

html2canvas : http://html2canvas.hertzen.com/

  • index.html
<section class="one-yuan-popup share-popup"><div class="light-box"></div><div class="container"><div class="header"><img src="<%= static_url %>/images/webview/one_yuan/hand_icon.png" alt=""><span>长按分享给好友或保存邀请卡片</span></div><div class="content"><img src="<%= avatar %>" class="one-share-avatar" alt=""><img src="<%= static_url %>/images/webview/one_yuan/page_share.png" alt=""><p class="one-share-title"><span id="nickname"><%= decodeURIComponent(nickname) %></span>邀请您</p><p class="one-share-desc">1元解锁私人图书馆</p><img src="<%= qrcode.qrCodeUrl %>" alt="" class="one-share-code"></div></div>
</section>
  • index.scss
.one-yuan-popup {position: fixed;width: 100vw;height: 100vh;top: 0;left: 0;z-index: 501;.light-box {display: block;position: fixed;width: 100%;height: 100%;top: 0;bottom: 0;left: 0;right: 0;background-color: rgba(0, 0, 0, .85);cursor: pointer;}.content {position: relative;width: 77vw;height: 131vw;padding-top: 0;background: #fff;border-radius: 8px;position: fixed;top: 0;bottom: 0;left: 0;right: 0;margin: auto;z-index: 1002;text-align: center;}
}

整体弹窗风格就是如下图所示,我们要保存的是绿色圈出来的区域,箭头指向得都是api数据,并且要全屏显示

期待保存得图片是这样得

  • index.js
let canvas2 = document.createElement('canvas'), // 创建canvas_canvas = document.querySelector('.share-popup .content'), //此处可换body,或div等 我们一般可以放绘制的元素w = parseInt(window.getComputedStyle(_canvas).width),h = parseInt(window.getComputedStyle(_canvas).height);//将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了
canvas2.width = w * 2;
canvas2.height = h * 2;
canvas2.style.width = w + 'px';
canvas2.style.height = h + 'px';let context = canvas2.getContext('2d'),rect = $('.share-popup .content').get(0).getBoundingClientRect(); //获取元素相对于视察的偏移量context.scale(2, 2);
context.translate(-rect.left,-rect.top); //设置context位置,值为相对于视窗的偏移量负值,让图片复位// =====================================注意注意注意=================================
// 必须先scale,再traslate,如果不是绘制全屏的话,这两句可以不加,正常绘制就会把margin区域也绘制上,如果需要不绘制margin区域,而且这个元素就根据窗口大小而居中,我们很不好控制,所以我们再这里先获取 getBoundingClientRect() 根据元素偏移,最后绘制出来全屏的,html2canvas(document.querySelector('.share-popup .content'), {canvas: canvas2,useCORS: true, // 允许图片跨域width: 584,  // 绘制图片的宽 2倍dpi: window.devicePixelRatio * 2, // dpi  如果模糊的话 就把dpi和scale缩放的值调大 dpi越高生成的图片越大height: 1188 // 绘制图片的高 2倍
}).then(function(canvas) {$('.share-canvas').css('display','block').attr('src', canvas.toDataURL());
});

转载于:https://www.cnblogs.com/luxiaoyao/p/11363552.html

html2canvas 把h5网页保存为图片 区域保存相关推荐

  1. 小程序画布画海报保存成图片可以保存实现完整代码

    老规矩先来个效果图: 因为是截图所以会有些模糊,在真机上会比较清晰 下面针对效果图来看看里面都画了什么元素,代码在文章的最后,大家想直接拷代码可以略过这,这里是方便大家理解代码. 首先,咱们的海报有几 ...

  2. 微信浏览器将html保存为图片并保存

    需求:将含有二维码的html转化成图片并保存 思路: 1.将html页面转化成图片需要使用H5中canvas(画布)功能,需要引入js库: html2canvas.js canvas2image.js ...

  3. WPF将Ui保存为图片和保存位图

    WPF将Ui保存为图片 SaveWindowContent(this, "c:\tmp.bmp"); private void SaveWindowContent(Window s ...

  4. html2canvas在H5里生成的图片不清晰很模糊的终极解决方案

    这文章到现在才出现是因为网上的绝大部分教程都能解决大部分遇到图片不清晰同学的问题,所以没必要再开帖. 本来国内技术论坛就充斥着各种重复复制和转载的文章,一搜技术问题出来100条结果,90条都是重复的, ...

  5. node将图片转换成html文件,node+puppeteer将整个网页html转换为图片并保存【滚动截屏】...

    Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行. demo只支持将简单不需要翻页,不需要登陆的页面转换为图片 需要n ...

  6. python基础:抓取博客网页上的图片并且保存的例子

    基本思路: 这个例子很好,给初学者一个很容易理解的代码例子,从指定的博客url中获取html的内容,并且分析该html中的内容,提取出图像的url,放入到数据结构列表中. 利用循环,将依次获取每一个图 ...

  7. android bitmap保存本地图片,Android保存View转Bitmap并到本地图库实时更新

    参考张大神的http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery/ 最开始我想的是截屏保存更方便,但 ...

  8. java保存base64图片_java保存base64位的图片,并且用时间文件夹分割

    需求:首先获取一个base64格式的图片,然后保存在指定文件夹内,并且新建时间文件夹进行区分,如果时间文件夹存在就直接存储,时间文件夹不存在就新建文件夹./** * 保存图片 * * @param b ...

  9. matlab中gui界面如何保存为图片,如何保存MATLAB GUI界面中的图片

    如何保存MATLAB GUI界面中的图片 代码来源自网络,作者未知,侵删. 原生支持png,bmp,jpg格式.另外自行添加了清晰度比较高的eps格式(荐). 新建一个按钮,按钮的代码如下. 其中第二 ...

最新文章

  1. Codeforces 997 C - Sky Full of Stars
  2. 高性能javascript 文件加载阻塞
  3. xadsafe做暗刷_手把手教你如何去掉网吧广告之网维大师_XADSAFE
  4. Python学习心得(二) : 更新列表
  5. 用android做用户管理中心,Android 如何设计用户Session管理?
  6. python中pygame输入换行文字,Pygame:写多行
  7. 关于JVM内存的N个问题
  8. cart算法_【统计学】决策树模型大比拼!ID3/C4.5/CART算法哪个更好用?
  9. Ubuntu中下载安装NVIDIA显卡驱动
  10. 软考-嵌入式系统设计师-笔记:嵌入式系统软件基础知识
  11. cdr图片随意拉伸变形_PS入门篇(6)—修改图片尺寸
  12. 网页刷新对服务器,刷新web服务器
  13. Django使用DRF + Simple JWT 完成小程序使用自定义用户的注册、登录和认证
  14. 将DXP设置为中文版
  15. 小内存的iPhone的拯救手册:如何扩充iPhone的内存
  16. opencv物体识别-识别水果
  17. 使用本地CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box创建三个k8s集群虚拟机
  18. 初中计算机科目三必背,科目三过关5句口诀,你一定要背完!
  19. 实时全局光照RSM-Reflective Shadow Maps(RSM)
  20. JDBC查看Preparedstatement执行的sql语句

热门文章

  1. 基于区块链的融合通信初探(三)
  2. 计算机网络(一)—— 概述(6):计算机网络体系结构
  3. Windows10更改右键新建菜单顺序
  4. 嵌入式软件工程师笔试面试指南-ARM体系与架构
  5. 90后小伙利用支付宝漏洞被抓, 我为什么拍手叫好?
  6. 怎么把html转为ini,ini文件读写
  7. 5款功能强大的国产软件,大幅提升你的工作效率,可免费使用
  8. python计算机入门书籍_计算机学习--摘自python 入门书 侯爵
  9. CentOS中LAMP的安装
  10. Windows系统Android Studio断点调试Android源码