溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Three.js截圖并下載的坑有哪些

發(fā)布時間:2021-09-01 14:05:59 來源:億速云 閱讀:188 作者:小新 欄目:web開發(fā)

小編給大家分享一下Three.js截圖并下載的坑有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

先來看看普通頁面的截圖

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

怎么解決嘞

為什么是白屏:

截取three.js 渲染的圖,如果直接將輸出的canvas變成圖片是無法獲取的,因為在獲取之前渲染界面是清空的狀態(tài),所以需要在渲染之后清空之前將渲染的內容轉換為圖片,即將場景的內容渲染一遍并將渲染的內容轉為圖片數(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轉化為base64的圖片,toDataURL可以直接做到,然后展示在新窗口就好啦。

function debugBase64(base64URL){
  let win = window.open();
  win.document.write('<image id="IframeReportImg" src="' + base64URL + '" frameborder="0"  allowfullscreen ></image>');
  }

圖片下載

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

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

其中的imgUrl就是我們之前轉好的碼,也就是

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

這里的imgData。

完成啦

Three.js截圖并下載的坑有哪些

以上是“Three.js截圖并下載的坑有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI