回覆列表
  • 1 # 杭州IT程式設計師亮亮

    在前端繪圖中最需要關心的就是效能,一次性繪製300-400張圖不會明顯感覺到有卡頓,但是如果繪製到1k+就說不好了,至少在我的pro上是會有很明顯的卡頓表現的。繪製的數量是一方面,而如果牽涉到影象的畫素處理就更明顯了,比如高斯模糊,灰階,色調等的處理。此時就需要開啟相應的webgl支援了。下面看看前端繪圖領域的霸主fabric.js是如何判斷宿主環境是否支援webgl的。

    下面看看上面的testPrecision方法:

    至此,題主的問題應該解決了吧。

  • 2 # 塗塗1

     1.開啟方式:  第一種:開啟cmd,切換到Chorme的安裝目錄,敲入chrome.exe --enable -webgl,回車就會開啟一個chrome瀏覽器視窗;  第二種:找到Chrome瀏覽器的快捷方式,如果沒有就建立一個快捷方式(右鍵點選chrome.exe,選擇“建立快捷方式”或者“傳送到”→“桌面快捷方式”),右鍵點選快捷方式,選擇屬性。在目標框內,雙引號的後邊,加入--enable-webgl --ignore-gpu-blacklist --allow-file-access-from-files。關閉目前開啟的所有Chrome視窗,然後用此快捷方式啟動Chrome瀏覽器。--enable-webgl  的意思是開啟WebGL支援;--ignore-gpu-blacklist的意思是忽略GPU黑名單,也就是說有一些顯示卡GPU因為過於陳舊等原因,不建議執行WebGL,這個引數可以讓瀏覽器忽略這個黑名單,強制執行WebGL;--allow-file-access-from-files的意思是允許從本地載入資源,如果你不是WebGL的開發者,不需要開發除錯WebGL,只是想要看一下WebGL的Demo,那可以不新增這個引數。  2.驗證開啟:  在位址列中輸入http://doesmybrowsersupportwebgl.com,如果顯示的是Yay,則支援WebGL,如果顯示的是Nay則不支援。

  • 3 # 阿福談手機

    方法一

    使用 canvas 的 toDataURL 進行判斷

    toDataURL方法在MDN解釋如下:

    HTMLCanvasElement.toDataURL() 方法返回一個包含圖片展示的 data URI 。可以使用 type 引數其型別,預設為 PNG 格式。圖片的解析度為96dpi。

    如果畫布的高度或寬度是0,那麼會返回字串“data:,”。

    如果傳入的型別非“image/png”,但是返回的值以“data:image/png”開頭,那麼該傳入的型別是不支援的。

    Chrome支援“image/webp”型別。

    toDataURL方法將圖片轉化為包含dataURI的DOMString,透過 base64 編碼前面的圖片型別值是image/webp進行判斷。

    比如在谷歌瀏覽器使用toDataURL方法轉成image/webp:

    在 Safari 瀏覽器使用toDataURL方法轉成image/webp:

    可以發現在不支援 webp 的瀏覽器進行toDataURL,得到的圖片型別並不是 webp,因此我們可以透過這個進行判斷。

    實現方法:

    var isSupportWebp = function () {

    try {

    return document.createElement("canvas").toDataURL("image/webp", 0.5).indexOf("data:image/webp") === 0;

    } catch(err) {

    return false;

    }

    }

    isSupportWebp()

    方法二

    在服務端根據請求header資訊判斷瀏覽器是否支援webp在圖片請求發出的時候,Request Headers 裡有 Accept,服務端可以根據Accept 裡面是否有 image/webp 進行判斷。

    方法三

    透過載入一張 webp 圖片進行判斷

    const supportsWebp = ({ createImageBitmap, Image }) => {

    if (!createImageBitmap || !Image) return Promise.resolve(false);

    return new Promise(resolve => {

    const image = new Image();

    image.onload = () => {

    createImageBitmap(image)

    .then(() => {

    resolve(true);

    })

    .catch(() => {

    resolve(false);

    });

    };

    image.onerror = () => {

    resolve(false);

    };

    image.src = "data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=";

    });

    };

    const webpIsSupported = () => {

    let memo = null;

    return () => {

    if (!memo) {

    memo = supportsWebp(window);

    }

    return memo;

    };

    };

    webpIsSupported()().then(res => {

    console.log("是否支援 webp", res)

    }).catch(err => {

    console.log(err)

    })

    此方法會載入一張 1x1 的白色的正方形背景圖,用來測試瀏覽器是否支援 webp。

    在 Google 測試程式碼:

  • 中秋節和大豐收的關聯?
  • 一定要兩個有質量的物體之間才能產生萬有引力嗎?單個有質量的物體會不會產生萬有引力?