如何避免getImageData() 中出現「畫布已被跨來源資料污染」錯誤
使用getImageData( 時) 方法從畫布擷取像素數據,您可能會遇到錯誤「畫布已被跨來源資料污染」。當您嘗試存取受從其他網域載入的資料影響的畫布上的像素資料時,會發生此錯誤。
要了解此錯誤的原因,請考慮大多數瀏覽器中實現的安全沙箱。預設情況下,瀏覽器限制不同來源之間的通信,這意味著從一個網域載入的資料不能被其他網域使用。如果畫布元素被來自不同來源的資料污染,則被視為「被污染」。
污染畫布的常見方法是從子網域 URL 載入映像,正如您在程式碼中提到的那樣。為了防止這個錯誤,有幾個選項:
1。設定「crossOrigin」屬性
將「crossOrigin」屬性指派給具有適當值的圖片元素:
這允許您的腳本存取影像中的像素數據,假設遠端伺服器設定了適當的CORS標題。
2。確保設定 CORS 標頭
在提供映像的遠端伺服器上,確保它會傳送以下 CORS 標頭:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET Access-Control-Allow-Headers: Content-Type
這些標頭授予對腳本的跨網域存取權限,並允許其從畫布檢索影像資料。
3.使用代理伺服器
如果在遠端伺服器上設定 CORS 標頭不可行,您可以使用代理伺服器來繞過跨網域限制。代理伺服器充當腳本和遠端伺服器之間的中介,促進不同來源之間的資料傳輸。
透過實施這些解決方案之一,您可以防止「畫布已被交叉污染」getImageData() 中的原始資料」錯誤並存取從不同網域載入的影像的像素資料。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3