欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Three.js截圖并下載的大坑

 更新時間:2019年11月01日 08:27:38   作者:Ahuuu  
這篇文章主要介紹了Three.js截圖并下載的大坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近做有關(guān)three.js的動畫,想通過截圖然后在新的頁面打開截圖,并且想把圖片下載到本地,連環(huán)坑很ok:ok_hand:嗯。這個必須要記下來!

先來看看普通頁面的截圖

一開始看到這個,完全沒思路,普通的html標簽要怎么才能變成一張圖???,其實嘞,目前的截圖方案都并不是我們理解的那種截圖,不管是使用canvas還是svg,其實都是做了轉(zhuǎn)化,但是這兩種方法都不在這詳細描述了,有興趣的可以看看這篇,說的很詳細了(canvas VS svg 截圖),然鵝,肯定是有工具的啦,那就是git上開源的 html2canvas ,有好多小星星呀,并且使用超簡單,但是原理也是將html的標簽重新繪制到canvas中,其中也有很多不能解決的問題,比如什么文本陰影啊,豎版圖片啊之類的,還有?。赢嬙亟厝〔怀鰜恚。。。?!,截屏出來是白屏。

怎么解決嘞

為什么是白屏:

截取three.js 渲染的圖,如果直接將輸出的canvas變成圖片是無法獲取的,因為在獲取之前渲染界面是清空的狀態(tài),所以需要在渲染之后清空之前將渲染的內(nèi)容轉(zhuǎn)換為圖片,即將場景的內(nèi)容渲染一遍并將渲染的內(nèi)容轉(zhuǎn)為圖片數(shù)據(jù)。

解決方案:

shot(){
   let image = new Image();
   renderer.render(scene, camera);//renderer為three.js里的渲染器,scene為場景 camera為相機

   let imgData = renderer.domElement.toDataURL("image/jpeg");//這里可以選擇png格式jpeg格式
   image.src = imgData;
   document.body.appendChild(image);//這樣就可以查看截出來的圖片了
}

劃重點:

其實就是相當于渲染一幀,并把這一幀輸出 而如果需要截某個部分的圖片,只需要將相機變一下,換成自己想要范圍,并渲染一幀再截屏出來。 優(yōu)點非常明顯, 這樣相當于重新渲染一幀,即便是截取某個很小的部分,截取的圖片也是很清晰的。

截完圖之后嘞

我想要的呢是將截的圖展示在新的頁面上,可是生成的圖片并不是base64的碼,所以我們要將渲染的canvas轉(zhuǎn)化為base64的圖片,toDataURL可以直接做到,然后展示在新窗口就好啦。

function debugBase64(base64URL){
  let win = window.open();
  win.document.write('<image id="IframeReportImg" src="' + base64URL + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen ></image>');
  }

圖片下載

還是基于瀏覽器的功能去操作的

function downloadImage(imgUrl) {
  let a = $("<a></a>").attr("href", imgUrl).attr("download", "img.png").appendTo("body");
  a[0].click();
  a.remove();
  }

其中的imgUrl就是我們之前轉(zhuǎn)好的碼,也就是

let imgData = renderer.domElement.toDataURL("image/jpeg");/

這里的imgData。

完成啦

源碼在這

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

相關(guān)文章

  • Js參數(shù)RSA加密傳輸之jsencrypt.js的使用

    Js參數(shù)RSA加密傳輸之jsencrypt.js的使用

    這篇文章主要介紹了Js參數(shù)RSA加密傳輸之jsencrypt.js的使用,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 基于javascript實現(xiàn)圖片預加載

    基于javascript實現(xiàn)圖片預加載

    這篇文章主要介紹了javascript圖片預加載的方法,實例分析了javascript實現(xiàn)圖片預加載的思路,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-01-01
  • select標簽設置默認選中的選項方法

    select標簽設置默認選中的選項方法

    下面小編就為大家分享一篇select標簽設置默認選中的選項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • JavaScript事件類型中UI事件詳解

    JavaScript事件類型中UI事件詳解

    這篇文章主要介紹了JavaScript事件類型中UI事件詳解的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • D3.js中強制異步文件讀取同步的幾種方法

    D3.js中強制異步文件讀取同步的幾種方法

    這篇文章主要給大家介紹了d3.js中強制異步文件讀取同步的幾種方法,文中給出了詳細的介紹和解決方法,對大家具有一定的參考價值,需要的朋友們下面來一起學習學習吧。
    2017-02-02
  • 微信小程序請求前置的方法詳解

    微信小程序請求前置的方法詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序請求前置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • javascript實現(xiàn)標簽切換代碼示例

    javascript實現(xiàn)標簽切換代碼示例

    本文給大家分享的事tab切換的兩段js,均可實現(xiàn)標簽切換功能,大家根據(jù)自己的需求自由選擇
    2016-05-05
  • 基于js中style.width與offsetWidth的區(qū)別(詳解)

    基于js中style.width與offsetWidth的區(qū)別(詳解)

    下面小編就為就大家?guī)硪黄趈s中style.width與offsetWidth的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 一次Webpack配置文件的分離實戰(zhàn)記錄

    一次Webpack配置文件的分離實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于一次Webpack配置文件的分離實戰(zhàn)記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Bootstrap 3 按鈕標簽實例代碼

    Bootstrap 3 按鈕標簽實例代碼

    這篇文章主要介紹了Bootstrap 3 按鈕標簽實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02

最新評論