html2canvas实现微信长按图片保存整个网页功能
项目中要做一个性格测试,第一个页面输入姓名,第二个页面显示测试结果。
第二个页面要求长按图片可以保存,微信自带的功能是长按一个图片可以保存但是他是局部的图片,而不是整张网页的内容。
网上找到了一个html2canvas的js插件。 遇到了几个问题
- 不支持跨域,微信头像显示不出来。
 - 截的图不清晰
 - 截出的元素是canvas
 
解决方法
- 图片跨域的问题是通过下载远程图片到本地解决的。
 - 截图不清晰是通过放大2倍实现的。
 - 创建img元素
 
页面需要先引入jquery和html2canvas.js
js实现的代码如下:
$(document).ready(function(){
    var w = document.body.scrollWidth;
    var h = document.body.scrollHeight;
    //要将 canvas 的宽高设置成容器宽高的 2 倍
    var canvas = document.createElement("canvas");
    canvas.width = w * 2;
    canvas.height = h * 2;
    canvas.style.width = w + "px";
    canvas.style.height = h + "px";
    var context = canvas.getContext("2d");
    //然后将画布缩放,将图像放大两倍画到画布上
    context.scale(2,2);
    html2canvas(document.body, {
        canvas:canvas,
        onrendered: function(canvas) {
            document.body.innerHTML='';
            var dataUrl = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
            var newImg = document.createElement("img");
            newImg.src = dataUrl;
            newImg.width = w;
            document.body.appendChild(newImg);
        }
    });
});