Canvas 跨域脫坑實踐

2021-09-13 03:20:57 字數 1555 閱讀 5208

canvas跨域如何解決?這裡記錄下使用canvas繪圖過程中所遇到的跨域問題和解決方案。

先來看下實現方法。

目標一般是由 + 文字 構成。無論是千奇百怪的大小,還是變幻莫測的各式文字,都能用canvasapidrawimagefilltext方法來完成。

基本流程如下:

獲取canvas上下文 --ctx

const canvas = document.queryselector(selector)

const ctx = canvas.getcontext('2d')

繪圖忽略上的內容,直接用drawimage將其畫到canvas畫布上即可。

const image = new image()

image.src = src

image.onload = () =>

drawimage有3種引數使用方式,具體用法可以檢視 mdn 文件。

獲取影象資料

呼叫htmlcanvaselementdom 物件提供的toblob(),todataurl()getimagedata()方法,即可。

canvas.toblob(blob => , mimetype, encoderoptions)
這裡的mimetype預設值為image/pngencoderoptions指定了質量,可用於壓縮,不過需要mimetype格式為image/jpeg或者image/webp

正常情況下,如果需要將繪製好的影象輸出,我們可以呼叫canvastoblob(),todataurl()getimagedata()方法來獲取到影象資料。然而,遇到跨域的情況就有些尷尬了。可能回報如下錯誤:

failed to execute 'toblob' on 'htmlcanvaselement': tainted canvases may not be exported.
或者

access to image at '' from origin '' has been blocked by cors policy: no 'access-control-allow-origin' header is present on the requested resource.
先來看看第2種情況。

接下來,我們來解決第1種情況。

如此,你便可以拿到資料了。如果沒招,換同域資源吧~

跨域處理實踐

問題1 本地開發環境想通過 ajax 獲取測試環境的資料,因為本地和開發網域名稱不一樣,受到同源策略限制,不能獲取測試環境資料。解決 在php的控制器中加上header access control allow origin 可以拿到測試環境資料。ok。問題2 請求不同資源下的資源。解決 使用jso...

跨域實踐之jsonp實現跨域

jsonp實現跨域是一種十分普遍的方法,它利用的是script標籤裡的src屬性可以跨域請求的功能來實現跨域,那這篇部落格就來實踐一下jsonp這種方法 既然要跨域,那我們先來看下不用jsonp,直接請求的結果 很顯然,由於瀏覽器的同源策略,響應被阻擋了,以至於我們無法獲取到服務端傳來的資料 接下來...

跨域踩坑經驗總結(內涵 跨域知識科普)

跨域問題是我們非常常見的問題,尤其在跨系統頁面間的呼叫經常會遇到,解決的方式在網上一搜一大把,這裡整理出我遇到跨域問題解決的方式以及思路,如何安全的解決跨域呼叫請繼續往下看。什麼是cross origin resource sharing?跨域請求存在的原因 由於瀏覽器的同源策略,即屬於不同域的頁面...