zoukankan      html  css  js  c++  java
  • html2canvas页面滚动内容截图并下载

    <!--div转成图片并下载-->
        <script src="./js/html2canvas.min.js"></script>
        <script>
            // edited from https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#Polyfill
            var dataURIToBlob =  function (imgName, dataURI, callback) {
                var binStr = atob(dataURI.split(',')[1]),
                                len = binStr.length,
                                arr = new Uint8Array(len);
    
                for (var i = 0; i < len; i++) {
                    arr[i] = binStr.charCodeAt(i);
                }
    
                callback(imgName, new Blob([arr]));
            }
    
            var callback = function (imgName, blob) {
                var triggerDownload = $("<a>").attr("href", URL.createObjectURL(blob)).attr("download", imgName).appendTo("body").on("click", function () {
                    if (navigator.msSaveBlob) {
                        return navigator.msSaveBlob(blob, imgName);
                    }
                });
                triggerDownload[0].click();
                triggerDownload.remove();
            };
    
            function createImg() {
                var getPixelRatio = function (context) { // 获取设备的PixelRatio
                    var backingStore = context.backingStorePixelRatio ||
                                    context.webkitBackingStorePixelRatio ||
                                    context.mozBackingStorePixelRatio ||
                                    context.msBackingStorePixelRatio ||
                                    context.oBackingStorePixelRatio ||
                                    context.backingStorePixelRatio || 0.5;
                    return (window.devicePixelRatio || 0.5) / backingStore;
                };
                //生成的图片名称
                var imgName = "cs.png";
                var shareContent = document.getElementsByTagName("body")[0];
                let scale = 3;
                var opts = {
                    //scale: scale,
                    /*canvas: canvas,
                     width,
                    height: height,*/
                    dpi: window.devicePixelRatio,
                    useCORS: true, // 【重要】开启跨域配置
                    // window.screen.availWidth,  //显示的canvas窗口的宽度
                    //height: window.screen.availHeight, //显示的canvas窗口的高度
                     window.document.body.offsetWidth,   //获取当前网页的宽度
                    height: window.document.body.offsetHeight, //获取当前网页的高度
                    windowWidth: document.body.scrollWidth,     //获取X方向滚动条内容
                    windowHeight: document.body.scrollHeight, //获取Y方向滚动条内容
                    x: 0,                                                                            //页面在水平方向没有滚动,故设置为0
                    y: window.pageYOffset                                            //页面在垂直方向的滚动距离
                };
                html2canvas(shareContent, opts).then(function (canvas) {
                    const context = canvas.getContext("2d");
    
                    // 【重要】关闭抗锯齿 https://segmentfault.com/a/1190000011478657
                    context.imageSmoothingEnabled = false;
                    context.webkitImageSmoothingEnabled = false;
                    context.msImageSmoothingEnabled = false;
                    context.imageSmoothingEnabled = false;
                    let imgUrl = canvas.toDataURL("image/png").replace("image/png","image/octet-stream");
                    //console.log("imgUrl",imgUrl);
                    dataURIToBlob(imgName, imgUrl, callback);
                });
            }
    
        </script>
  • 相关阅读:
    去除aspx生成的页面最开始的空行
    单个方框内图片垂直水平居中和等比例缩小(支持所有浏览器)
    .net里怎样在Main方法之前执行代码?
    WIN7系统盘空间不够用解决办法
    语音识别工具箱之HTK安装与使用
    一个VC中的DLL导出类的例子
    c++ 随机数 产生不重复的随机数
    android开发 NDK 编译和使用静态库、动态库
    c++指针 初识
    c++ UTF8和Unicode 互转
  • 原文地址:https://www.cnblogs.com/siyecao2010/p/11642008.html
Copyright © 2011-2022 走看看