日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS如何實現頁面截屏功能實例代碼

瀏覽:182日期:2024-03-22 17:58:04

'頁面截屏'是前端經常遇到的需求,比如頁面生成海報,彈窗圖片分享等,因為瀏覽器沒有原生的截圖API,所以需要借助canvas來實現導出圖片實現需求。

可行性方案 方案1: 將 DOM 改寫成 canvas ,調用canvas的toBlob或者toDataURL方法即刻上傳到七牛云或服務器 方案2: 使用第三方庫html2canvas.js實現 canvas , 在不更改頁面已有DOM的情況下優雅生產canvas解決方案的選擇

方案1:需要手動計算每個DOM元素的Computed Style,然后需要計算好元素在canvas的大小位置等屬性。

方案1難點

需要棄用已有的html頁面,改用canvas重寫。 頁面結構層復雜的情況下用canvas寫,不易重構。 有一定canvas基礎。

方案2:該項目在Github上stars已有兩萬多start,作者仍在積極維護。API非常簡單,在已有項目中開箱即用。

html2canvas

因為是常見的需求,所以社區會有成熟的解決方案,首先試試社區的解決方案。

<div style='padding: 10px; background: #f5da55'> <h4 style='color: #000; '>Hello world!</h4></div>

html2canvas(document.querySelector('#capture')).then(canvas => { document.body.appendChild(canvas)});

以上是官網的實例用法。在網頁上出現了一個新的 canvas DOM。接下來我們只需要把canvas轉換成圖片就好。這里使用canva原生的toDataURL和toBlob方法上次到七牛云。

使用時需要注意。此處如果生產的畫布中有跨域圖片,需要配置allowTaint為true。

如果是原生canvas實現,canvas需要所有跨域圖片請求完成才可繪制。有兩種解決方案

方案1:在html上寫好img標簽,src寫好對應的圖片url。缺點很明顯,會污染頁面的布局結構。 方案2:使用js,使用new Image()的方式。設置src到對應的圖片url,在onload回調中處理相關操作。優點:可行性最高,不過有回調地獄的問題。我們用Promise改寫一下

function asyncImage(url) { const img = new Image(); img.src = url; img.setAttribute(’crossOrigin’, ’anonymous’); return new Promise((resolve, reject) => {img.onload = () => resolve(img);img.onerror = reject; });}

好的,大功告成~是不是可以交付需求了呢?開開心心提測,但是在移動端測試的時候發現生產的圖片非常模糊。這樣是不行的,明顯low了許多(測試不給過orz)。

github有相應的解決方案 傳送門 ,這個回答也是解決很多人的問題

基本原理:將canvas寬高放大兩倍。把css把canvas的style設置成1倍大小。

var shareContent = YourTargetElem; var width = shareContent.offsetWidth; var height = shareContent.offsetHeight; var canvas = document.createElement('canvas'); var scale = 2 || window.devicePixelRatio ; //也可以使用設備像素比 canvas.width = width * scale; canvas.height = height * scale; canvas.getContext('2d').scale(scale, scale); var opts = {scale: scale, canvas: canvas, logging: true, width: width, height: height }; html2canvas(shareContent, opts).then(function (canvas) {var context = canvas.getContext(’2d’);var img = Canvas2Image.convertToImage(canvas, canvas.width, canvas.height);document.body.appendChild(img);$(img).css({ 'width': canvas.width / 2 + 'px', 'height': canvas.height / 2 + 'px',}) });

原理我們已經知道了,實際操作之后圖像也確實清晰了很多。但是問題還是沒有解決掉。

縮小雖然提高了清晰度,但是我們需要的圖片是原始比例的大小。。

最終多次嘗試無果后,選擇放棄使用框架。直接用原生canvas擼一個!

canvas繪制

我們知道,在高清屏的設備下,任何繪制canvas中的圖像、文字、線條、形狀都可能會出現模糊的問題。可通過引入 GitHub 中的 hidpi-canvas 有效地解決。

首先去 GitHub 下載 hidpi-canvas.js 文件:傳送門; 在項目中引入 hidpi-canvas.js 文件; 調用 getPixelRatio() 函數,得到 ratio 值; 在 drawImage() 中,將 width 和 height 乘以 ratio; 最終的canvas導出為Blog,轉換成文件對象上傳七牛云。

核心代碼如下

function asyncImage(url) {const img = new Image();img.src = url;img.setAttribute(’crossOrigin’, ’anonymous’);return new Promise((resolve, reject) => { img.onload = () => resolve(img); img.onerror = reject;}); } async function drawCanvas(){var canvas = document.querySelector(’canvas’);var context = canvas.getContext(’2d’);var ratio = getPixelRatio(context); // 關鍵代碼canvas.width = 300 * ratio; // 畫布寬度canvas.height = 300 * ratio; // 畫布高度var divWidth = 300 * ratio; // 用于內容居中var divHeight = 300 * ratio; // 用于內容居中const image = await asyncImage(’picUrl’)const imgWidth = 550const imgHeight = 300context.drawImage(this, 50, 50, imgWidth * ratio, imgHeight * ratio)// Some other codeconst Blob = canvas.toBlob((Blob)=>{ //上傳七牛云}); }

最終生成的圖片終于清晰了...只需要根據dom的offsetWidth等適配不同屏幕就可以了。

總結

如果對圖片的清晰度要求不高,或者圖片需求是生成縮略圖的情況下。采用 html2canvas 是非常不錯的選擇。否則,還是用canvas繪制出的圖片更清晰。

到此這篇關于JS如何實現頁面截屏功能的文章就介紹到這了,更多相關JS頁面截屏功能內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产a一区二区三区v免费| 成人一二三区| 正在播放日韩精品| 久久一区国产| 激情综合婷婷| 成人三级高清视频在线看| 国产精品久久久久久久久久妞妞| 手机精品视频在线观看| 天堂а√在线最新版中文在线| 精品视频免费| 不卡一二三区| 国产91久久精品一区二区| 99成人在线视频| 99久久夜色精品国产亚洲1000部| 日韩一区二区三区免费播放| 精品国模一区二区三区| 秋霞国产精品| 蜜桃tv一区二区三区| 1024精品久久久久久久久| 九九综合九九| 在线亚洲欧美| 亚洲视频二区| 日韩精品导航| 欧美午夜三级| 国产高清亚洲| 成人一区而且| 亚洲va中文在线播放免费| 亚洲成人一区在线观看| 亚洲少妇一区| 日韩福利视频导航| 国产激情欧美| xxxxx性欧美特大| 久久中文字幕二区| 久久国产精品亚洲77777| 蜜桃视频在线观看一区| 日韩高清二区| 日韩av片子| 亚洲黄色影院| 日韩中文欧美在线| 日韩国产欧美视频| 精品五月天堂| 欧美日韩色图| 亚洲tv在线| 精品美女在线视频| 在线一区视频观看| 久久亚洲风情| 国产精品亚洲成在人线| 最近高清中文在线字幕在线观看1| 蜜桃精品在线| 中文不卡在线| 精品黄色一级片| 美女少妇全过程你懂的久久| 亚洲aa在线| 久久影院资源站| 91精品一区国产高清在线gif| 亚洲毛片视频| 中文字幕在线免费观看视频| 免费看日韩精品| 美女视频黄 久久| 欧美/亚洲一区| 欧美日韩伊人| 丝袜av一区| 日韩午夜视频在线| 国产一区二区三区久久| 国产高清久久| 国产精品欧美三级在线观看 | 欧美亚洲自偷自偷| 久久久久久一区二区| 噜噜噜躁狠狠躁狠狠精品视频 | 欧美一级网站| 99久久久久久中文字幕一区| 亚洲精品极品| 午夜精品久久久久久久久久蜜桃| 免费日韩av| 成人在线视频中文字幕| 男女男精品网站| 国产精品亚洲欧美一级在线| 婷婷成人综合| 国产精品九九| 视频一区在线播放| 国产传媒av在线| 婷婷综合国产| 久久蜜桃精品| 国产乱码精品一区二区亚洲| 亚洲调教视频在线观看| 国产毛片精品| 美女久久一区| 在线天堂中文资源最新版| 日本不卡视频一二三区| 99久久婷婷| 精品三级国产| 美女少妇全过程你懂的久久| 精品精品国产三级a∨在线| 一区二区电影在线观看| 日韩av免费| 成人午夜网址| 国产欧美一区二区三区米奇| 国产视频亚洲| 亚洲成人不卡| 成人在线免费观看91| 欧美天堂在线| 久久国产精品亚洲77777| 91tv亚洲精品香蕉国产一区| 欧美国产先锋| 日本视频在线一区| 亚洲色诱最新| 群体交乱之放荡娇妻一区二区| 麻豆91精品91久久久的内涵| 亚洲精品动态| 亚洲综合电影一区二区三区| 久久久精品久久久久久96 | 日欧美一区二区| 午夜国产一区二区| 久久国产小视频| 黑森林国产精品av| 精品色999| 国产一区福利| 国产成人久久| 日韩88av| 精品中文字幕一区二区三区| 国产三级精品三级在线观看国产| 天海翼精品一区二区三区| 亚洲专区视频| 四虎精品一区二区免费| 在线精品福利| 中文字幕中文字幕精品| 美女被久久久| 一级成人国产| 亚洲精品麻豆| 欧美日韩一区二区国产| 欧美日韩18| 国产精品1区| 国内自拍视频一区二区三区| 精品精品国产三级a∨在线| 国产欧美日韩精品高清二区综合区| 亚洲毛片视频| 五月激激激综合网色播| 自拍日韩欧美| 日韩毛片在线| 欧美激情国产在线| 你懂的亚洲视频| 国产精品一区二区三区www| 日韩中文字幕在线一区| 精品一区在线| 一区二区三区国产盗摄| 老色鬼久久亚洲一区二区| 婷婷成人基地| 蜜桃成人av| 欧美日韩在线观看视频小说| 日韩综合在线| 国产成人精品999在线观看| 麻豆精品av| 久久精品国产福利| 久久精品国产999大香线蕉| 日韩欧美一区二区三区在线视频 | 欧美日韩视频免费观看| 亚洲精品88| 久久精品免费一区二区三区| 神马午夜久久| 精品女同一区二区三区在线观看| 成午夜精品一区二区三区软件| 久久精品日韩欧美| 夜鲁夜鲁夜鲁视频在线播放| 午夜影院一区| 欧美在线网站| 国产亚洲精品美女久久| 国产精品美女在线观看直播| 波多视频一区| 老鸭窝毛片一区二区三区| 久久国产精品色av免费看| 国产精品嫩模av在线| 黄色网一区二区| 亚洲v在线看| 亚洲日韩中文字幕一区| 国产亚洲一区| 国产精品亚洲成在人线| 精品三级av| 136国产福利精品导航网址| 日韩在线视频一区二区三区| 国产乱人伦精品一区| 激情国产在线| 亚洲黄页一区| 欧美一级二区| 国产福利91精品一区二区| 99成人在线视频| 视频在线观看一区| 欧美日韩精品一区二区三区在线观看| 精品视频高潮| 玖玖精品视频| 国产精品久久久久毛片大屁完整版| 麻豆精品在线观看| 伊人久久在线| 玖玖玖国产精品| 97精品国产| 国产精品日本| 免费在线亚洲欧美| 亚洲手机在线| 免费成人性网站| 免费福利视频一区二区三区| 亚洲免费影视|