午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 使用html2canvas.js實現頁面截圖并顯示或上傳的示例代碼

使用html2canvas.js實現頁面截圖并顯示或上傳的示例代碼

熱門標簽:黃石ai電銷機器人呼叫中心 如何查看地圖標注 地圖標注軟件打印出來 智能電銷機器人被禁用了么 ok電銷機器人 高德地圖標注商戶怎么標 惡搞電話機器人 欣鼎電銷機器人 效果 電話機器人技術

最近寫項目有用到html2canvas.js,可以實現頁面的截圖功能,但遭遇了許多的坑,特此寫一篇隨筆記錄一下。

在使用html2canvas時可能會遇到諸如只能截取可視化界面、截圖沒有背景色、svg標簽無法截取等問題,下面詳細的說明一下。

一、導入html2canvas.js

這個不需要多說,可以從github上獲取: https://github.com/niklasvh/html2canvas

也可以直接導入鏈接: <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>

使用起來也非常簡單,具體的API可以去網上查找,生成png圖片使用“image/png”即可。

其中$("#xxx")為你想要截取的div,外面可以通過jquery獲取它,當然document獲取也是可以的。

html2canvas($("#xxx"), {
         onrendered: function (canvas) {
             var url = canvas.toDataURL("image/png");
        window.location.href = url;
           }
   });

其它類型的圖片如jpg,為image/jpeg等等,可自行查詢API。

到這里其實簡單的截圖已經完成了,如果界面稍微復雜一點的話,可能就會出現各種坑,下面一個一個解決。

二、svg無法截取的問題

當我們截取一個div時,如果這個div中存在svg標簽,一般情況下是截取不到的,比如截取一個流程圖,得到的是下面這個樣子:

可以看到,流程圖的線沒有截取到,也就是svg沒有截取到,這時的解決方法是把svg轉換成canvas再進行截圖即可,直接上代碼。

這里的each循環是循環所有的svg標簽,將它們全部轉換為canvas

if (typeof html2canvas !== 'undefined') {
        //以下是對svg的處理
        var nodesToRecover = [];
        var nodesToRemove = [];
        var svgElem = cloneDom.find('svg');
        svgElem.each(function (index, node) {
            var parentNode = node.parentNode;
            var svg = node.outerHTML.trim();

            var canvas = document.createElement('canvas');
            canvas.width = 650;
            canvas.height = 798;
            canvg(canvas, svg); 
            if (node.style.position) {
                canvas.style.position += node.style.position;
                canvas.style.left += node.style.left;
                canvas.style.top += node.style.top;
            }

            nodesToRecover.push({
                parent: parentNode,
                child: node
            });
            parentNode.removeChild(node);

            nodesToRemove.push({
                parent: parentNode,
                child: canvas
            });

            parentNode.appendChild(canvas);
        });
        
   }

這里需要用到canvg.js,以及它的依賴文件rgbcolor.js,網上可以直接下載,也可以直接導入。

三、背景透明的問題

這個其實很簡單,因為它默認是透明的,html2canvas中有一個參數background就可以添加背景色,如下:

html2canvas(cloneDom, {
      onrendered: function(canvas) {
           var url =canvas.toDataURL("image/png");
      },
      background:"#fafafa"
}); 

四、只能截取可視部分的問題

如果需要截取的div超出了界面,可能會遇到截取不全的問題,如上圖,只有一半的內容,這是因為看不到的部分被隱藏了,而html2canvas是無法截取隱藏的dom的。

所以此時的解決辦法是使用克隆,將需要截取的部分克隆一份放在頁面底層,再使用html2canvas截取這個完整的div,截取完成后再remove這部分內容即可,完整代碼如下:

function showQRCode() {
    scrollTo(0, 0);
    
    //克隆節點,默認為false,即不復制方法屬性,為true是全部復制。
    var cloneDom = $("#d1").clone(true);
    //設置克隆節點的z-index屬性,只要比被克隆的節點層級低即可。
    cloneDom.css({
        "background-color": "#fafafa",
        "position": "absolute",
        "top": "0px",
        "z-index": "-1",
        "height": 798,
        "width": 650
    });
   
    if (typeof html2canvas !== 'undefined') {
        //以下是對svg的處理
        var nodesToRecover = [];
        var nodesToRemove = [];
        var svgElem = cloneDom.find('svg');//divReport為需要截取成圖片的dom的id
        svgElem.each(function (index, node) {
            var parentNode = node.parentNode;
            var svg = node.outerHTML.trim();

            var canvas = document.createElement('canvas');
            canvas.width = 650;
            canvas.height = 798;
            canvg(canvas, svg); 
            if (node.style.position) {
                canvas.style.position += node.style.position;
                canvas.style.left += node.style.left;
                canvas.style.top += node.style.top;
            }

            nodesToRecover.push({
                parent: parentNode,
                child: node
            });
            parentNode.removeChild(node);

            nodesToRemove.push({
                parent: parentNode,
                child: canvas
            });

            parentNode.appendChild(canvas);
        });
        
        //將克隆節點動態追加到body后面。
        $("body").append(cloneDom);

        html2canvas(cloneDom, {
            onrendered: function(canvas) {
                var url =canvas.toDataURL("image/png");
                window.location.href = url ;
                cloneDom.remove();    //清空克隆的內容
             },
             background:"#fafafa"
        }); 
        
   } 
}

這里外面首先將要截取的div克隆一份,并將z-index設置為最小,避免引起界面的不美觀,然后是對svg進行的處理,上面已經分析過了,最后將克隆節點追加到body后面即可。

在onrendered中,我們可以直接使用location.href跳轉查看圖片,可以進行保存操作,也可以將url寫入img的src中顯示在界面上,如 $('#imgId').attr('src',url);

最后可以在界面展示剛剛截取到的圖片:

五、上傳圖片保存到數據庫,并在界面中獲取該圖片顯示

現在得到url了,需要上傳到后端,并存到數據庫中,再另一個展示的界面中加載該圖片。我一般習慣于使用url來存儲圖片路徑,而不是用blob存儲。

因為需要在另一個界面中獲取圖片,所以我把圖片存在了與webapp同級的一個resource目錄下,代碼如下:

//存儲圖片并返回圖片路徑
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] b = decoder.decodeBuffer(product.getProPic().substring("data:image/png;base64,".length()));
        ByteArrayInputStream bais = new ByteArrayInputStream(b);
        BufferedImage bi1 = ImageIO.read(bais);
        String url = "user_resource" + File.separator + "img" + File.separator + "product_"+UUID.randomUUID().toString().replace("-", "")+".png";
        String totalUrl = System.getProperty("root") + url;
        File w2 = new File(totalUrl);
        ImageIO.write(bi1, "png", w2);
        
        product.setProPic(url);    //將圖片的相對路徑存儲到數據庫中
        
        int res = productMapper.insertSelective(product);    //添加到數據庫

這里因為涉及到其它邏輯,所以只放一部分代碼。

這里使用的是BASE64Decoder來存儲圖片,我們獲取到圖片后,需要使用substring將“data:image/png;base64,”的內容截取掉,因為“,”后面才是圖片的url, url.substring("data:image/png;base64,".length())

對于路徑,上面代碼中的url是我存儲到數據庫中的內容,而totalUrl就是實際進行ImageIO的write操作時存儲的真實路徑,getProperty()方法獲取的項目的根目錄,可以在web.xml中配置如下內容,然后 System.getProperty("root") 即可。

<!-- 配置系統獲得項目根目錄 -->
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>root</param-value>
</context-param>
<listener>
    <listener-class>
        org.springframework.web.util.WebAppRootListener
    </listener-class>
</listener>

現在圖片的url就存到數據庫里了,而圖片本身就存儲在tomcat下該項目的這個目錄下。

最后外面在界面上獲取,只需要在當前的url前面加上項目名即可 < img class ="depot-img" src ="<%=request.getContextPath()%>/`+e.proPic+`" >

然后就可以看到界面上顯示的圖片了:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:金昌 綏化 阿壩 聊城 萍鄉 赤峰 盤錦 中山

巨人網絡通訊聲明:本文標題《使用html2canvas.js實現頁面截圖并顯示或上傳的示例代碼》,本文關鍵詞  使用,html2canvas.js,實現,頁面,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用html2canvas.js實現頁面截圖并顯示或上傳的示例代碼》相關的同類信息!
  • 本頁收集關于使用html2canvas.js實現頁面截圖并顯示或上傳的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    日韩视频精品| 一级做a爰片久久毛片| 欧美亚洲一二三区| 亚洲精品电影在线一区| 国产成人午夜视频| 日韩精品一区二区亚洲av| 免费观看污网站| 中文字幕一区二区三区有限公司 | 精品久久免费看| 亚洲蜜臀av乱码久久精品| 精品亚洲免费视频| 91亚洲国产成人久久精品麻豆 | 国产网红主播福利一区二区| 色综合免费视频| 亚洲欧美在线视频免费| 无码人妻精品一区二区三区温州| 日本欧美黄色片| 久久人人爽爽人人爽人人片av| 97在线精品视频| 亚洲欧美国产精品| 在线观看精品一区| 亚洲欧洲性图库| 国产成人精品综合在线观看| 日本高清视频免费看| 中文字幕超碰在线| 三级黄色片在线观看| 国产老头和老头xxxx×| 国产成人一区二区三区小说| 久久综合亚州| 啪啪小视频网站| 任我爽在线视频| 中文字幕人妻无码系列第三区| 精品久久久久久无码中文野结衣| 久久精品国产精品国产精品污 | 六月丁香激情网| 日本不卡久久| av一区二区三区四区电影| 欧洲亚洲女同hd| 另类天堂视频在线观看| 福利一区视频在线观看| r级无码视频在线观看| 国产免费一区二区三区| 亚洲综合大片69999| 欧美激情视频免费观看| 国产一区二区三区毛片| 在线欧美日韩精品| 亚洲无线码一区二区三区| 一区二区视频在线| 91丨porny丨中文| 国产成人aaaa| 蜜桃一区二区三区在线| 亚洲成人久久精品| 日本不卡中文字幕| 天天爱天天做天天爽| 色噜噜噜噜噜噜| 亚洲国产精品一区二区久久hs| 日韩av资源在线| 法国空姐在线观看免费| 国产成年人在线观看| www.久久久| 九九九九九精品| 亚洲一区二区在线| 国产中文一区二区| 久久99精品久久久久久青青日本 | 夜夜嗨av一区二区三区网页 | 一级黄色免费网站| 视频在线一区二区| 摸摸摸bbb毛毛毛片| 欧美成人猛片aaaaaaa| 欧美亚洲日本在线观看| 99热这里都是精品| 久久久999国产精品| 屁屁影院ccyy国产第一页| 天天色影综合网| 亚洲国产成人在线| 欧美与黑人午夜性猛交久久久| 久久综合色视频| 欧美xxxooo| 成人av午夜电影| 欧美凹凸一区二区三区视频| 亚洲精品.www| 欧美午夜精品久久久久久超碰| 国产精品成人av性教育| 热久久久久久久久| 中文字幕精品一区二区精| 精品视频在线免费| 800av在线免费观看| 欧美国产一区二区| 一本二本三本亚洲码| 国产不卡在线一区| 日韩在线中文字幕| 国产精品久久久久久成人| 一本久久综合亚洲鲁鲁五月天| 视频一区亚洲| 日韩精品一区二区亚洲av| 在线精品视频免费播放| 久久久人人爽| 亚洲国产成人无码av在线| 91麻豆免费在线观看| 亚洲天堂色网站| 可以在线看的av网站| 中文字幕成人在线观看| 欧美xxxx黑人又粗又长精品| 久草国产精品视频| 欧美群妇大交群的观看方式| 日韩a∨精品日韩在线观看| 日本一级大毛片a一| 国产日韩精品一区二区三区| 国产女人18毛片水18精品| 澳门黄色一级片| 日韩一区二区三区免费看 | 欧美一二三四区在线| 欧美一级二级三级九九九| 伊人中文字幕在线观看 | 亚洲国产精品美女| 一区二区免费电影| 国产精品一卡二卡| 久久综合一区| 亚洲老司机在线| 91影院未满十八岁禁止入内| 日本黄色片视频| 亚洲国产天堂久久国产91 | 91麻豆精品国产91久久久久久| 草草草视频在线观看| 激情六月婷婷综合| 97av在线视频| 三级黄色片播放| 国产成人精品亚洲午夜麻豆| 欧美交受高潮1| 亚洲另类第一页| 天堂一区二区在线| 亚洲性av网站| 国产一区免费看| 亚洲性夜色噜噜噜7777| 国产人妻精品午夜福利免费| 亚洲国产高清在线观看视频| 久久久91精品国产一区不卡| 麻豆av免费看| 一区二区三区四区激情 | 国产在线欧美日韩| 亚洲色图第一区| av在线免费播放网址| 色偷偷av亚洲男人的天堂| 国产剧情精品在线| 亚洲精选一区二区| 欧美成人三级在线播放| 一区二区三区四区激情| 视频一区二区精品| 国产在线视频一区二区三区| 亚洲午夜精品久久久久久久久久久久 | 亚洲精品手机在线观看| 日本高清无吗v一区| 日本wwwwwww| 99天天综合性| 午夜精品美女久久久久av福利| 亚洲第一成人av| 欧美一级国产精品| 久久精品亚洲a| 亚洲最新av在线网站| 色呦呦中文字幕| 日本一本中文字幕| 日韩精品中文字幕久久臀| 丰满人妻一区二区| 成人手机视频在线| 欧美日韩成人在线| 伦伦影院午夜理论片| 欧美剧在线免费观看网站| 草b视频在线观看| 亚洲综合色婷婷| 日本十八禁视频无遮挡| 亚洲免费在线视频一区 二区| 国产精品播放| 日韩精品在线一区二区三区| 欧美成人精品激情在线观看| 国产高清视频一区| 午夜精品久久久久久久无码| 久久一区二区视频| 国产成人在线小视频| 日本韩国免费观看| 日韩av中文字幕在线免费观看| 超碰97人人干| 亚洲欧美综合v| 亚洲国产精品无码久久久| 欧美中文字幕在线| 日本不卡一区二区| 国产日韩视频在线观看| 91在线你懂的| 91精品国产综合久久香蕉922| 国产又爽又黄又嫩又猛又粗| 最近中文字幕日韩精品| 精品一区二区视频在线观看| 91久久人澡人人添人人爽欧美| 国产精品老熟女一区二区| 亚洲一区二区三区四区在线播放| 一区二区三区中文免费| 国产一区二区波多野结衣| 91亚色免费| 久久久国产精品成人免费| 亚洲18私人小影院| 亚洲视频每日更新| 欧美图片一区二区| 国产精品成人一区二区三区吃奶| 99久久国产综合色|国产精品| 日韩精品视频在线观看视频| 久久免费视频2| 黄色一区二区在线| 国产精品理论在线| 五月天一区二区| 亚洲精品国产精品国自| 欧美福利在线观看| 久久99热狠狠色一区二区| 国产精品动漫网站| 亚洲第一页在线| 欧美一级淫片免费视频黄| 欧美成人精品一区| 日韩三级一区二区| 人人做人人澡人人爽欧美| 黑丝av在线播放| 欧美图片一区二区三区| 日本网站免费在线观看| 精品伦理精品一区| 国产一区视频网站| 国产喷水在线观看| 久久久爽爽爽美女图片| 日韩电影免费一区| 无码人妻丰满熟妇区毛片| 日本一区二区三区四区在线视频| 黄色片视频在线播放| 亚洲爱爱爱爱爱| 五月婷婷丁香六月| 成都免费高清电影| 一区二区免费在线观看| 亚洲精品国产福利| 国产精品美女视频| 日韩中文字幕高清| 激情五月婷婷久久| 国产精品国内视频| 久久久美女毛片| www.com久久久| 亚洲欧洲在线观看| 男人的天堂亚洲一区| 国产黄色激情视频| 中文字幕亚洲综合久久筱田步美| 日韩av女优在线观看| 91欧美精品成人综合在线观看| 93久久精品日日躁夜夜躁欧美 | 国产精品自产拍高潮在线观看| kk眼镜猥琐国模调教系列一区二区| 自拍视频第一页| 国产精品都在这里| 国产一区二区看久久| 国产经典久久久| 亚洲人成在线播放| 成人中文字幕合集| 亚洲天堂自拍偷拍| 美国美女黄色片| mm131午夜| 国产精品久久久久9999| 国产一区二区三区在线观看网站 | 亚洲一区不卡在线| 欧美成人高清电影在线| 首页欧美精品中文字幕| 成年网站免费在线观看| 国内精品久久久久影院 日本资源| 国产精品私人自拍| 波多野结衣视频在线观看| 国产欧美一区二区| 成人18精品视频| 黑人と日本人の交わりビデオ| 一区二区三区久久网| 欧美精品激情在线观看| 国产盗摄视频一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲欧美视频在线| 久久久影视传媒| 欧美成人久久久免费播放| 在线播放豆国产99亚洲| 另类视频在线观看+1080p| 日本成人激情视频| 亚洲欧美日韩精品久久奇米色影视| 日韩欧美成人免费视频| 床上的激情91.| 久久精品伊人| 国产亚洲精品女人久久久久久| dy888午夜| 免费99精品国产自在在线| 91亚洲国产成人精品一区二区三| 日本三级2019| 国产va亚洲va在线va| 国产精品成人久久久久| 在线视频你懂得一区二区三区| 免费在线观看黄网站| 伊人久久大香线蕉综合75| 国产亚洲欧洲高清一区| 欧美性猛交xxx| 久久99国产精品麻豆| 免费无码毛片一区二区app| 国产内射老熟女aaaa| 国产精品视频yy9099| 欧美日本韩国一区| 日韩色图在线观看| 亚洲天堂国产视频| 精品久久精品久久| 在线精品播放av| 精品国产一区久久| 无码av中文一区二区三区桃花岛| av综合在线播放| 人人超碰91尤物精品国产| 日韩av在线电影| 成人性生交视频免费观看| 性欧美.com| 伊人青青综合网站| 欧美日韩国产色视频| 日本不卡视频在线| 午夜免费激情视频| 91专区在线观看| 综合欧美国产视频二区| 亚洲天堂精品视频| 午夜国产在线观看| 久久午夜无码鲁丝片| 亚洲综合色一区| 成人欧美精品一区二区| 日韩电影天堂视频一区二区| 国模精品视频一区二区三区| 欧美成人精品二区三区99精品| 精品成人国产在线观看男人呻吟| 开心激情综合网| 在线观看日本www| 熟女熟妇伦久久影院毛片一区二区| 国产97色在线|日韩| 亚洲精品一区二区久| 精品国一区二区三区| 精品三级在线观看| 精品偷拍各种wc美女嘘嘘| 日韩精品中文字| 精品国产一区二区在线| 97碰在线观看| 91爱视频在线| 日本不卡免费高清视频| 午夜精品一区二区三区三上悠亚| 日本一区二区免费在线| 视频一区二区中文字幕| 国产suv一区二区| 福利视频第一页| 2025中文字幕| wwwwww欧美| 91亚洲精品久久久| 国产精品久久久久久久久久三级| 欧美成人伊人久久综合网| 亚洲四区在线观看| 久久91精品国产91久久小草| 伊人久久亚洲综合| 草久视频在线观看| 中文字幕一区二区人妻| 亚洲成人一级片| 在线天堂中文字幕| 一本在线免费视频| 国产精品扒开腿做爽爽爽a片唱戏| 一级黄色片在线免费观看| 成人一级片网站| 国产不卡在线观看| 中文字幕日韩欧美在线| 亚洲欧美日韩高清| 精品呦交小u女在线| 日韩视频免费观看高清在线视频| 亚洲欧美在线看| 色婷婷综合成人| 26uuu日韩精品一区二区| 91久久国产自产拍夜夜嗨| 3d蒂法精品啪啪一区二区免费| 国产精品二区在线观看| 欧洲亚洲一区二区三区四区五区| 亚洲影院高清在线| 高清国产在线一区| 国模精品一区二区三区色天香| xvideos亚洲| 久久久精品美女| 亚洲乱亚洲乱妇无码| 亚洲欧美日韩精品| 日韩精品亚洲元码| 日韩欧美久久一区| 精品日韩在线观看| 欧美亚洲丝袜传媒另类| 91精品福利在线一区二区三区| 精品av久久707| 精品国产一区二区精华| 亚洲男女自偷自拍图片另类| 亚洲精品美女久久久| 亚洲国产欧美一区二区三区久久| 中文字幕av一区二区三区谷原希美| 欧美激情xxxx| 91精品国产91久久久久久| 日韩美女av在线| 日韩在线不卡视频| 91av免费观看91av精品在线| 2019亚洲男人天堂| 国产有色视频色综合| 播放灌醉水嫩大学生国内精品| 老头老太做爰xxx视频| 亚洲成人av综合| 久久久久一区二区三区四区| 欧美综合欧美视频| 欧美大片第1页| 91牛牛免费视频| 国产精品999视频| 中文字幕在线2021| 国产黄色小视频在线观看| 99久久综合狠狠综合久久| 亚洲国产日产av| 日韩精品久久久久久福利|