html2canvas 把h5网页保存为图片 区域保存
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());
});
html2canvas 把h5网页保存为图片 区域保存的更多相关文章
- 基于html2canvas实现网页保存为图片及图片清晰度优化
一.实现HTML页面保存为图片 1.1 已知可行方案 现有已知能够实现网页保存为图片的方案包括: 方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含 ...
- C# WebBrowser的DrawToBitmap方法 截取网页保存为图片
bool mark = true; private void btnOpen_Click(object sender, EventArgs e) { ...
- php获取网页中图片并保存到本地
php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: save_img("http://www.jbxue.com" ?>
- php获取网页中图片并保存到本地的代码
php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: <?php /** * 获取网页中图片,并保存至本地 * by www.jbxue.com */ header(" ...
- asp自动解析网页中的图片地址,并将其保存到本地服务器
程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...
- python连续爬取多个网页的图片分别保存到不同的文件夹
python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...
- h5页面使用js实现保存当前图片到手机相册
很可惜,这个鬼东西微信内置浏览器不适用 页面: <!doctype html> <html> <head> <meta charset="UTF-8 ...
- 修改css的(屏蔽)overflow: hidden;实现浏览器能把网页全图保存成图片
摘要: 1.项目需要,需要对网页内容“下载”保存成全图片 2.QQ浏览器等主流浏览器都支持这种下载保存功能 3.项目需要场景:编写好的项目维护文档,放在服务器上.如果是txt不能带图片可视化,如果wo ...
- 火狐浏览器FireFox 如何将整个网页保存为图片
使用Friefox的Pearl Cresent Page Saver插件 如图所示网页有很长的滚动条 点击右下角的该插件选项,将整个页面保存为图片 在桌面上得到了这样一个文件,大小是1263×6083 ...
随机推荐
- docker镜像和加速
首先,需要明确一个问题:Mirror 与 Private Registry 有什么区别? Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像 ...
- python-接口开发flask模块(三)开发登陆接口
#写一个login的接口,实现的功能是输入用户名和密码,如果数据库中有该用户,那么就去redis中插入 登陆产生的sign值插入redis中有效时间600s import flask import t ...
- linux查看硬盘信息
1. 通过内核查看硬盘信息 cat /sys/block/sda/device/model cat /sys/block/sda/device/vendor 2. 用过hdparm命令查看 hdpar ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_5 Mybatis中使用Dao实现类的执行过程分析-查询方法1
继续运行testFindAll方法.把其他类的断点都删除掉. 只在这里加了断点,所以直接就跳转到这里了.RoutingStatementHandler里面的query方法 继续往下走,断点又回到了这里 ...
- spring boot + mybatis 连接 oracle 出现 ORA-00923: 未找到要求的 FROM 关键字 错误
1.原因 hikari 连接池配置错误,mysql和oracle的配置不一样 2.修改 spring: datasource: hikari: connection-test-query: selec ...
- Docker网络大揭秘(单机)
docker网络官网 https://docs.docker.com/network/ Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或将它们连接到非Docker工作负载.Dock ...
- Java——HashMap使用Demo
package map; import java.util.Collection; import java.util.HashMap; import java.util.Set; public cla ...
- CentOS 8 下 nginx 服务器安装及配置笔记
参考文档 nginx官方文档 安装 在CentOS下,nginx官方提供了安装包可以安装 首先先安装前置软件 sudo yum install yum-utils 然后将nginx官方源加入到yum源 ...
- 用了 10 多年的 Tomcat 居然有bug !
Java技术栈 www.javastack.cn 优秀的Java技术公众号 为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现.然后我们为SpringBoot框架写 ...
- 05: 常用反扒机制 & 解决方法
1.1 常用反扒机制 参考博客:https://blog.csdn.net/python36/article/details/90174300 1.header 浏览器的请求头 header中添 ...