zoukankan      html  css  js  c++  java
  • Js实现将html页面或div生成图片


    今天要分享的是用html2canvas根据自己的需求生成截图,并且修复html2canvas截图模糊,以及绕过服务器图片保存至本地。  

    只需要短短的几行代码,就能根据所需的dom截图,是不是很方便,但是生成的图片模糊
    //直接选择要截图的dom,就能截图,但是因为canvas的原因,生成的图片模糊
                html2canvas(document.querySelector('div')).then(function(canvas) {
                        document.body.appendChild(canvas);
                 })
      
       常见的解决方案是,生成一个多倍的画布,然后将其放在较小的容器内,这样就解决了截屏模糊的尴尬。

     还有一个问题是怎么将图片绕过服务器保存至本地,canvas有个toDataURL的方法,然后a标签有个download属性,感觉简直天造之和。当然微信中屏蔽下载,可以借助微信的webview中的一个内置规则,只要是a标签(不含href属性)里面嵌套Img的,可以正常呼出保存至手机和分享给朋友的菜单栏。

    以下是简单的demo, html2canvas.min.js 下载地址: http://www.bootcdn.cn/html2canvas/

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>htmltopic</title>
        <script type="text/javascript" src="/h5/js/jquery-1.11.0.min.js"></script>
        <script type="text/javascript" src="js/html2canvas.min.js"></script>
        <style>
            * {
                margin: 0;
            }
     
     
            .test {
                width: 100px;
                height: 100px;
                text-align: center;
                line-height: 100px;
                background-color: #87CEEB;
                display: inline-block;
                vertical-align: top;
            }
     
     
            canvas {
                margin-right: 5px;
            }
     
     
            .down {
                float: left;
                margin: 40px 10px;
            }
            .down2 {
                float: left;
                margin: 40px 30px;
            }
        </style>
    </head>
    <body>
     
     
        <div class="test">测试</div>
    <div><a class="down" href="" download="downImg">下载</a>
    </div>
        <div><a class="down2" href="" download="downImg">下载2</a></div>
    <script>
        //直接选择要截图的dom,就能截图,但是因为canvas的原因,生成的图片模糊
        //html2canvas(document.querySelector('div')).then(function(canvas) {
        //    document.body.appendChild(canvas);
        //});
        //创建一个新的canvas
        var canvas2 = document.createElement("canvas");
        let
        _canvas = document.querySelector('div');
        var w = parseInt(window.getComputedStyle(_canvas).width);
        var 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";
        //可以按照自己的需求,对context的参数修改,translate指的是偏移量
        //  var context = canvas.getContext("2d");
        //  context.translate(0,0);
        var context = canvas2.getContext("2d");
        context.scale(2, 2);
        html2canvas(document.querySelector('div'), { canvas: canvas2 }).then(function(canvas) {
            //document.body.appendChild(canvas);
            //canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
            document.querySelector(".down").setAttribute('href', canvas.toDataURL());
        });
    </script>
     
     
    <script language="javascript">
        //这是另一种写法
        $(function () {
            $(".down2").click(function () {
                html2canvas($(".test")).then(function (canvas) {
                    var imgUri = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); // 获取生成的图片的url
                    window.location.href = imgUri; // 下载图片
                });
     
     
                //html2canvas($('.tongxingzheng_bg'), {
                //    onrendered: function (canvas) {
                //        var data = canvas.toDataURL("image/png");//生成的格式
                //        //data就是生成的base64码啦
                //        alert(data);
                //    }
                //});
            });
        });
    </script>
    </body>
    </html>
  • 相关阅读:
    SQL必知必会-笔记(五)函数
    软件测试面试题:系统中的图片不显示如何排查原因
    windows用浏览器访问linux目录文件
    记测试工作中一次印象深刻的事
    怎么快速适应新的测试工作?
    xshell如何导出日志文件和上传文件
    jmeter+fiddler高效率整理接口脚本
    python-用requests库处理form-data格式的参数
    软件自动化测试工程师面试题集锦(4)
    shell脚本批量检查某个或多个服务的端口和进程是否正常
  • 原文地址:https://www.cnblogs.com/phpyangbo/p/12767138.html
Copyright © 2011-2022 走看看