html2canvas 是一个相当不错的 JavaScript 类库,它使用了 html5 和 css3 的一些新功能特性,实现了在客户端对网页进行截图的功能。html2canvas 通过获取页面的 DOM 和元素的样式信息,并将其渲染成 canvas 图片,从而实现给页面截图的功能。

官网:https://github.com/niklasvh/html2canvas

遇到的问题:

参考官方的 Demo,发现所截的图失真厉害。

解决方案:

将 canvas 的宽高放大到原容器宽高的 3 倍,参考代码如下:

<html>
<head>
<meta name="layout" content="main">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="html2canvas.js"></script>
<script type="text/javascript" src="canvas2image.js"></script>
</head>
<body>
<div id="to-image">
<h3>Html5页面截图 演示</h3>
<div style="background-color: #abc;padding: 10px">
Hello World!
<br>
<div style="background: url(1.jpg) center center; width: 500px;height: 300px;"></div>
<br>
<a href="http://phpgo.cnblogs.com" target="_blank">http://phpgo.cnblogs.com</a>
<br>
<textarea id="textArea" col="20" rows="3"></textarea>
</div>
</div>
<div style="background-color: red; padding: 10px; margin-top: 10px;">
<input id="do-image" type="button" value="开始截图">
</div>
<div id="show-image"> </div>
</body>
</html> <script type="text/javascript">
$(document).ready(function() {
$("#do-image").on("click", function(event) {
var dom = $('#to-image');
var width = dom.width();
var height = dom.height();
var type = "png";
var scaleBy = 3; // 缩放比例
var canvas = document.createElement('canvas');
canvas.width = width * scaleBy;
canvas.height = height * scaleBy + 60; // 60 是我处理完后发现短了一点,具体为什么不清楚,如果你也少的话,根据自己的项目调吧
canvas.style.width = width * scaleBy + 'px';
canvas.style.height = height * scaleBy + 'px';
var context = canvas.getContext('2d');
context.scale(scaleBy, scaleBy);
html2canvas(dom[0], {
canvas : canvas,
onrendered : function(canvas) {
// 放到到原来的 3 倍
$("#show-image").append(Canvas2Image.convertToImage(canvas, width * scaleBy, height * scaleBy, type)); // 在将放大的图片用CSS再缩小,方便在手机上清晰查看
$("#show-image img").css("width", width + "px").css("height", height + "px");
}
}); });
}); </script>

效果图:

完整示例下载:

CSDN下载

参考:

https://www.zhihu.com/question/48217555

最新文章

  1. Some Link: Java Reflection
  2. ASP.NET ZERO 学习 HangFire的使用二
  3. nodepad++快捷键收集
  4. Vmware vsphere 网络架构
  5. 【ZOJ】3329 One Person Game
  6. Redis基础知识之——自定义封装单实例和普通类Redis
  7. SRM 598 DIV1
  8. linux sed 使用
  9. Agg vs. Cairo 二维绘图引擎之比较和选择 .
  10. “最美天气”版本II
  11. s:textarea 标签不能改变大小的解决方案
  12. 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
  13. (n)e(m)
  14. 吴裕雄 python 数据可视化
  15. HDU - 5073 Galaxy(数学)
  16. [转]epoll详解
  17. VSTO:使用C#开发Excel、Word【2】
  18. jQuery插件实例四:手风琴效果[无动画版]
  19. Swift3 JSON字符串和字典互转(JSON字符串转字典和字典转JSON字符串)
  20. kafka-python的API简单介绍

热门文章

  1. shell邮件发送功能实现
  2. python爬虫-图片批量下载
  3. 春夏秋冬又一春之Redis持久化
  4. 搜索引擎ElasticSearchV5.4.2系列一之ES介绍
  5. sphinx 同时使用多个索引进行检索探究
  6. python基础-列表元组字典
  7. FileInputStram入门
  8. Win7如何解决telnet不是内部或外部命令的方案!
  9. HDU 6249 Alice’s Stamps
  10. 006.MySQL双主-Master02可用配置