欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用HTML實現(xiàn)截圖功能-創(chuàng)新互聯(lián)

這篇文章主要介紹了如何使用HTML實現(xiàn)截圖功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)松滋免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

前言

最近項目需求總是有HTML頁面生成圖片功能,所以就想記錄一下自己在過程中遇到的問題,并加深印象,日后如果忘了也可以回顧。我們項目使用的是html2canvas插件,還有其他插件,例如dom-to-image、rasterizehtml,可以根據(jù)需求使用。

html2canvas使用問題匯總

項目中引入的是0.5.0-beta4版本的cdn鏈接,直接調(diào)用方法html2canvas(dom,options);第一個參數(shù)是你要繪制的dom對象,第二個參數(shù)是一些繪制的配置參數(shù),個別參數(shù)我嘗試了也沒搞清楚具體什么作用可以自行看html2canvas文檔,對于我用到的直接上代碼:

// 生成圖片
        function generateImg() {
            var shareContent = document.body;// 需要繪制的部分的 (原生)dom 對象 ,注意容器的寬度不要使用百分比,使用固定寬度,避免縮放問題
            var width = shareContent.offsetWidth;  // 獲取(原生)dom 寬度
            var height = shareContent.offsetHeight;
            var offsetTop = shareContent.offsetTop;  //元素距離頂部的偏移量
            // var rect = shareContent.getBoundingClientRect();
            var canvas = document.createElement('canvas');  //創(chuàng)建canvas 對象
            var context = canvas.getContext('2d');
            var scaleBy = 3;  //像素密度 (也可以采用自定義縮放比例)
            canvas.width = width * scaleBy;   //這里 由于繪制的dom 為固定寬度,居中,所以沒有偏移
            canvas.height = (height + offsetTop) * scaleBy;  // 注意高度問題,由于頂部有個距離所以要加上頂部的距離,解決圖像高度偏移問題
            canvas.height = height * scaleBy;
            // context.translate(0, -offsetTop); // 畫布偏移
            context.scale(scaleBy, scaleBy);
            html2canvas(shareContent, {
                logging: true, // 是否打印日志,默認false
                taintTest: true, //檢測每張圖片都已經(jīng)加載完成
                scale: scaleBy, // 添加的scale 參數(shù)
                canvas: canvas, //自定義 canvas
                width: width, //dom 原始寬度
                height: height, //dom 原始高度
                useCORS: true, //允許跨域
                onrendered: function(canvas) { // 頁面繪制成功后的回調(diào)
                    var url = canvas.toDataURL("image/png");
                    // 生成圖片后的操作
                }
            });
        }

圖片模糊解決

  • 由于像素比(DPR = 設(shè)備像素/CSS像素)的問題,電腦上截圖看著還行,到手機上就會非常模糊。繪制圖片時可以根據(jù)像素比把圖片放大,使用時在定義圖片的寬度,也可以自定義縮放比??s放比也不是越大越好,太大了也可能會出問題。計算像素比的代碼:

function getPixelRatio(context){
        var backingStore = context.backingStorePixelRatio ||
                context.webkitBackingStorePixelRatio ||
                context.mozBackingStorePixelRatio ||
                context.msBackingStorePixelRatio ||
                context.oBackingStorePixelRatio ||
                context.backingStorePixelRatio || 1;
        return (window.devicePixelRatio || 1) / backingStore;
    }
  • 繪圖時盡量不要使用背景圖片,直接使用img這樣會更清晰

圖片跨域問題

有次頁面中使用了微信頭像,設(shè)置了useCORS: true不能顯示頭像,設(shè)置allowTaint:true直接報錯不能使用toDataURL可能無法導出受污染的畫布;最后只有找百度了

  • 修改Nginx配置文件,由于我們項目其他地方也用到了,所以不便修改,可以修改的參考:

location ^~ /wechat_image/ {
  add_header 'Access-Control-Allow-Origin' "$http_origin" always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
  add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
  proxy_pass http://thirdwx.qlogo.cn/;
}
  • 把圖片轉(zhuǎn)換成base64格式并設(shè)置CrossOrigin="anonymous",嘗試后有緩存的情況下還是不能正常生成圖片,需要在后面拼接一個隨機參數(shù)解決緩存問題,Android可以了,但ios上還是不行。

  • 后來發(fā)現(xiàn)直接在微信頭像的img標簽上設(shè)置CrossOrigin="anonymous"即<img class="user-img" th:src="${wxUser.headImgUrl}" alt="" crossOrigin="anonymous" />,微信頭像的請求頭來就有access-control-allow-origin: *,Android和ios上都可以了,如果你之前嘗試過其他方法,可能需要清下緩存,不然Android會誤導你不能正常顯示。

  • 最近又發(fā)現(xiàn)一個html2canvas的options里配置proxy為跨域的url。

生成圖片替換頁面時閃現(xiàn)問題

前面幾次生成圖片,都沒有出現(xiàn)這個問題,最近一次出現(xiàn)了替換時頁面一閃,以為是不是圖片太大了,我將兩個活動的圖片保存對比并不是,具體我還是沒搞清楚,不過通過先在dom中寫一個空的img標簽然后生成的src替換給img,判斷圖片加載完成后再將繪制的dom隱藏掉解決了這個問題。

css樣式超出顯示省略號消失

html2canvas不支持css樣式生成省略號,百度找到了解決方法,通過js判斷超過父盒子高度時用省略號替換

$(".info_text_box").each(function () {
            var divH = $(this).height();
            var $p = $("p", $(this)).eq(0);
            while ($p.outerHeight() > divH) {
                $p.html($p.html().replace(/(\s)*([a-zA-Z0-9]+|\W)(\.\.\.)?$/, "..."));
            };
        });

引入web字體時字體還沒有顯示就生成圖片

window.onload=function(){}是等頁面資源加載完畢再執(zhí)行,但是在ios中并不支持,后來發(fā)現(xiàn)當字體大小大于300px時不同字體的寬度差別很大,就通過定時器判斷字體大小來判斷字體是否加載成功,但最總因為字體文件加載太慢,就放棄了使用特殊字體

// 通過判斷字體內(nèi)容寬度判斷字體加載完成
function fn_fontWatch(fontFamily, cb) {
        function fn_gen_span_with_font(font) {
            var span=document.createElement('span');
            span.style.cssText = "display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:" + font;
            span.innerHTML = 'BESbswy';
            document.body.append(span);
            return span;
        };
        var span_default = fn_gen_span_with_font('serif');
        var span_default_width = span_default.offsetWidth;
        document.body.removeChild(span_default);
        var span_font = fn_gen_span_with_font(fontFamily + ',serif');
            var fn_check_loop = function() {
                if(span_default_width !== span_font.offsetWidth){
                    document.body.removeChild(span_font);
                    cb();
                } else {
                    window.setTimeout(fn_check_loop,500);
                }
            };
            fn_check_loop();
    };

其他問題

  • 一次活動需要判斷進入頁面次序,html2canvas是通過遍歷dom繪制圖片的,當生成圖片時除了js都會重新執(zhí)行一次,導致類似刷新頁面記錄次序,最后次序通過ajax請求獲取解決了問題;

  • html2canvas只會截取頁面中可見的內(nèi)容,設(shè)置了display: nonevisibility:hidden的元素是截取不到的

  • 生成圖片時文字有些許變化,比如安卓的數(shù)字1就變化特別明顯,而且文字的位置有點下移,原因我沒找到,影響不大,目前我也沒解決;

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用HTML實現(xiàn)截圖功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

新聞名稱:如何使用HTML實現(xiàn)截圖功能-創(chuàng)新互聯(lián)
鏈接地址:http://aaarwkj.com/article10/dipggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、云服務(wù)器、網(wǎng)站內(nèi)鏈虛擬主機、移動網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
国产三级三级精品久久| 黄片在线免费在线播放| 日本精品一区二区三区免费| 亚洲欧美国产另类综合| 精品人妻区二区三区蜜桃| 亚洲天堂欧美日韩一区| 99久久成人精品国产片| 东京男人的天堂国产av| 日韩欧美国产精品一区| 日韩欧美中文字幕一区二区| 欧洲精品亚洲精品日韩专区| 亚洲免费一级黄色录像片| 亚洲不卡免费在线视频| 91国产精品视频在线| 国产一区黄片视频在线观看| 看夫妻性生活免费视频| 亚洲欧美一区二区色慰| 强乱人妻中文字幕日本| 日韩亚洲精品99综合观看| 午夜精品一区二区三区久久| 亚洲精品一区二区成人影院| 亚洲美女av一区二区三区| 久久中文人妻丝袜不卡| 日韩精品一区二区毛片| 偷拍视频在线一区二区| 成年人正常性生活频率| 精品毛片av一区二区三区| 午夜视频免费看一区二区| 亚洲欧美日韩伦理一区| 黑人精品少妇一区二区三区| 全国精品免费视频久久久| 国产黄的网站在线观看| 精品人妻一区二区在线99| 国产超大超粗超爽视频| 激情影院在线观看福利| 中文字幕乱码人妻一区| 婷婷色中文字幕综合在线| 欧美精品一区二区三区乱码| 日本一区中文字幕欧美| 亚洲激情午夜福利视频| 国产亚洲综合一区二区三区|