最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端使用domtoimage生成截圖的詳細(xì)步驟

 更新時(shí)間:2024年09月28日 08:56:05   作者:Lucky_Dog_c  
前端生成截圖技術(shù)多樣,html2canvas雖詳細(xì)但耗時(shí)且阻塞操作,而domtoimage使用流暢,支持多種圖片格式轉(zhuǎn)換,如png、jpg、svg等,并可獲取原始像素值,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前端生成截圖有多種方式:

  • 使用html2canvas,在之前文章中已有具體介紹(使用html2canvas生成截圖)這個(gè)插件在生成截圖的時(shí)候有一些弊端,在canvas繪制時(shí)耗時(shí)長,且繪制時(shí)屏幕會(huì)阻塞無法操作
  • 使用domtoimage官方文檔)這個(gè)插件在使用時(shí)會(huì)相對(duì)絲滑很多,一下簡單介紹使用方法(具體可結(jié)合使用html2canvas生成截圖食用)
	npm install dom-to-image //下載插件
	
	import domtoimage from 'dom-to-image'; //引入
    const screenImage = (screen) => { //screen為要下載的dom元素
      return new Promise((resolve, reject) => {
        const formData = new FormData()
        domtoimage.toBlob(screen, {  //直接轉(zhuǎn)化為二進(jìn)制格式,可以直接將圖片下載
          style: {
            backgroundColor: '#17496D' //給它一個(gè)背景色
          }
        })
          .then(function(blob) {
            formData.append('image', blob, 'image.png')
            resolve(formData)
          })
          .catch(function(error) {
            console.error('截圖生成失敗', error)
          })
      })
    }

domtoimage方法

domtoimage.toPng(…);將節(jié)點(diǎn)轉(zhuǎn)化為png格式的圖片 domtoimage.toJpeg(…);將節(jié)點(diǎn)轉(zhuǎn)化為jpg格式的圖片
domtoimage.toSvg(…);將節(jié)點(diǎn)轉(zhuǎn)化為svg格式的圖片,生成的圖片的格式都是base64格式
domtoimage.toBlob(…);將節(jié)點(diǎn)轉(zhuǎn)化為二進(jìn)制格式,這個(gè)可以直接將圖片下載
domtoimage.toPixelData(…);獲取原始像素值,以Uint8Array
數(shù)組的形式返回,每4個(gè)數(shù)組元素表示一個(gè)像素點(diǎn),即rgba值。這個(gè)方法也是挺實(shí)用的,可以用于WebGL中編寫著色器顏色。

domtoimage屬性

filter : 過濾器節(jié)點(diǎn)中默寫不需要的節(jié)點(diǎn);
bgcolor : 圖片背景顏色;
height, width : 圖片寬高;
style:傳入節(jié)點(diǎn)的樣式,可以是任何有效的樣式;
quality : 圖片的質(zhì)量,也就是清晰度;一個(gè)介于 0 和 1 之間的數(shù)字,表示 JPEG圖像的圖像質(zhì)量(例如 0.92 => 92%)。默認(rèn)為 1.0 (100%)
cacheBust :將時(shí)間戳加入到圖片的url中,相當(dāng)于添加新的圖片;
imagePlaceholder :圖片生成失敗時(shí),在圖片上面的提示,相當(dāng)于img標(biāo)簽的alt;

附:dom-to-image實(shí)現(xiàn)的網(wǎng)頁截圖

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>echarts 測(cè)試</title>
		
        <script type="text/javascript" src="dom-to-image.js"></script>
    </head>
    <body style="position:relative;">
     <div style="width:100px;height:100px;background-color:#000;color:white;">
         尾氣請(qǐng)問氣味哦平均氣溫哦啤酒去i
     </div>
     <div style="width:100px;height:100px;background-color:#ccc;"></div>
     <div style="width:100px;height:100px;background-color:#666;color:#ccc;">
         請(qǐng)我陪考去請(qǐng)問哦
     </div>
     <div style="width:100px;height:100px;background-color:#000;color:white;">
            尾氣請(qǐng)問氣味哦平均氣溫哦啤酒去i
        </div>
        <div style="width:100px;height:100px;background-color:#ccc;"></div>
 
        <div style="width:100px;height:100px;background-color:#000;color:white;">
                尾氣請(qǐng)問氣味哦平均氣溫哦啤酒去i
            </div>
            <div style="width:100px;height:100px;background-color:#ccc;"></div>
            <div style="width:100px;height:100px;background-color:#ddd;"></div>
            <div style="width:900px;height:100px;background-color:#666;">
                橋文件額期望寄哦IQ叫我我就群毆我為奇偶去叫哦我IQ寄哦 
            </div>
     <div οnclick="jt()">點(diǎn)擊截圖</div>
     <script>
         var pointInfo= {};
        document.οnmοusedοwn=function(e){
            if(!pointInfo.bool)return;
            pointInfo.startInfo={
                x:e.clientX+window.scrollX,
                y:e.clientY+window.scrollY
            };
            pointInfo.eleArr[1].style.left=e.clientX+window.scrollX+"px";
            pointInfo.eleArr[1].style.top=e.clientY+window.scrollY+"px";
        }
         
        document.οnmοusemοve=function(e){
            if(!pointInfo.bool)return;
            if(!pointInfo.startInfo)return;
            pointInfo.eleArr[1].style.width=e.clientX-pointInfo.startInfo.x+window.scrollX+"px";
            pointInfo.eleArr[1].style.height=e.clientY-pointInfo.startInfo.y+window.scrollY+"px";
        }
        
        document.οnmοuseup=function(e){
            if(!pointInfo.bool)return;
            if(!pointInfo.startInfo)return;
            pointInfo.bool=false;
            var c = document.createElement("canvas");
            node=document.body;
            document.body.removeChild( pointInfo.eleArr[0]);
            var promise = domtoimage.toPng(node);
            promise.then(function(v){
                var img =new Image();
                img.src=v;
                c.width=parseInt(pointInfo.eleArr[1].style.width);
                c.height=parseInt(pointInfo.eleArr[1].style.height);
                var ctx = c.getContext("2d");
                img.οnlοad=function(){
                    ctx.drawImage(img,pointInfo.startInfo.x,pointInfo.startInfo.y,c.width,c.height,0,0,c.width,c.height);
                    var imgS=document.createElement("img");
                    imgS.src=c.toDataURL();
                    document.body.appendChild(imgS);
                    pointInfo.startInfo=null;
                }
              
            });
        }
        function jt(){
            var d= document.createElement("div");
            var d2=document.createElement("div");
        
            d.style.cssText="width:100%;height:100%;background-color:rgba(0,0,0,0.2);position:absolute;top:0;left:0;";
            d2.style.cssText="position:absolute;background:rgba(255,255,255,0.2);";
            pointInfo.eleArr= [d,d2];
            pointInfo.bool=true;
            d.appendChild(d2);
            document.body.appendChild(d);
        }
     </script>
    </body>
</html>

總結(jié)

到此這篇關(guān)于前端使用domtoimage生成截圖的文章就介紹到這了,更多相關(guān)前端domtoimage生成截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • BootstrapValidator不觸發(fā)校驗(yàn)的實(shí)現(xiàn)代碼

    BootstrapValidator不觸發(fā)校驗(yàn)的實(shí)現(xiàn)代碼

    BootstrapValidator是基于bootstrap3的jquery表單驗(yàn)證插件,是最適合bootstrap框架的表單驗(yàn)證插件,本文給大家介紹BootstrapValidator不觸發(fā)校驗(yàn)的實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2016-09-09
  • JAVASCRIPT 客戶端驗(yàn)證數(shù)據(jù)的合法性代碼(正則)

    JAVASCRIPT 客戶端驗(yàn)證數(shù)據(jù)的合法性代碼(正則)

    JAVASCRIPT 客戶端驗(yàn)證數(shù)據(jù)的合法性代碼,比較全了,所以簡單分頁了下,喜歡的朋友可以收藏下。
    2010-04-04
  • 動(dòng)態(tài)加載script文件的兩種方法

    動(dòng)態(tài)加載script文件的兩種方法

    第一種就是利用ajax方式,第二種是,動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽,設(shè)置其src屬性,通過把script標(biāo)簽插入到頁面head來加載js,感興趣的朋友可以了解下
    2013-08-08
  • JavaScript閉包與作用域鏈實(shí)例分析

    JavaScript閉包與作用域鏈實(shí)例分析

    這篇文章主要介紹了JavaScript閉包與作用域鏈,結(jié)合實(shí)例形式分析了javascript閉包的具體概念、功能、并對(duì)比作用域鏈分析了閉包的相關(guān)使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-01-01
  • JavaScript中內(nèi)存泄漏的介紹與教程(推薦)

    JavaScript中內(nèi)存泄漏的介紹與教程(推薦)

    內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束。下面這篇文章主要給的大家介紹了關(guān)于JavaScript中內(nèi)存泄漏的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Jquery 常用方法一覽表(集合)

    Jquery 常用方法一覽表(集合)

    之前腳本之家發(fā)過相關(guān)的文章,這里又是一篇關(guān)于jquery常用方法的收集整理,我們給放到一起,學(xué)習(xí)jquery的朋友可以參考下。
    2010-03-03
  • BootStrap tab選項(xiàng)卡使用小結(jié)

    BootStrap tab選項(xiàng)卡使用小結(jié)

    這篇文章主要為大家詳細(xì)介紹了BootStrap tab選項(xiàng)卡使用小結(jié),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • js前端登錄加密解決方案

    js前端登錄加密解決方案

    項(xiàng)目中需要前端書寫登錄頁面,用戶輸入賬號(hào)密碼,本文主要介紹了js前端登錄加密解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • json的結(jié)構(gòu)與遍歷方法實(shí)例分析

    json的結(jié)構(gòu)與遍歷方法實(shí)例分析

    這篇文章主要介紹了json的結(jié)構(gòu)與遍歷方法,結(jié)合具體實(shí)例形式分析了json常見的簡單與復(fù)雜結(jié)構(gòu)表示方法,以及具體的遍歷操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • 分析JavaScript數(shù)組操作難點(diǎn)

    分析JavaScript數(shù)組操作難點(diǎn)

    本篇文章通過例舉代碼分析的方式給大家講解了JavaScript數(shù)組操作難點(diǎn)以及需要注意的地方,一起學(xué)習(xí)參考下吧。
    2017-12-12

最新評(píng)論

陵水| 梁平县| 禄劝| 桐柏县| 莫力| 澜沧| 商城县| 云和县| 双辽市| 突泉县| 莎车县| 新邵县| 象山县| 南和县| 库尔勒市| 张家川| 汝城县| 郯城县| 杭锦后旗| 犍为县| 普洱| 济南市| 隆子县| 古丈县| 汽车| 嘉荫县| 莒南县| 余江县| 钟祥市| 饶平县| 韶山市| 崇州市| 南部县| 长武县| 利川市| 平江县| 肥西县| 屏东市| 荔浦县| 通河县| 宝坻区|