校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解Canvas 跨域脫坑實踐

詳解Canvas 跨域脫坑實踐

熱門標簽:欣鼎電銷機器人 效果 如何查看地圖標注 高德地圖標注商戶怎么標 智能電銷機器人被禁用了么 黃石ai電銷機器人呼叫中心 地圖標注軟件打印出來 ok電銷機器人 電話機器人技術 惡搞電話機器人

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

先來看下實現方法。

實現方法

目標圖片一般是由 圖片 + 文本 構成。無論是千奇百怪的大小圖片,還是變幻莫測的各式文本,都能用 canvas api drawImage 和 fillText 方法來完成。

基本流程如下:

1、獲取 canvas 上下文 -- ctx

const canvas = document.querySelector(selector)
const ctx = canvas.getContext('2d')

2、繪圖

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

const image = new Image()
image.src = src
image.onload = () => {
    ctx.save()
    // 這里我們采用以下參數調用
    this.ctx.drawImage(image, dx, dy, dWidth, dHeight)
    this.ctx.restore()
}

drawImage 有3種參數使用方式,具體用法可以查看MDN 文檔。

3、獲取圖像數據

調用 HTMLCanvasElement DOM 對象提供的 toBlob(), toDataURL() 或 getImageData() 方法,即可。

canvas.toBlob(blob => {
    // 你要的 blob
}, mimeType, encoderOptions)

這里的 mimeType 默認值為 image/png。encoderOptions 指定了圖片質量,可用于壓縮,不過需要 mimeType 格式為 image/jpeg 或者 image/webp。

Canvas 跨域

正常情況下,如果需要將繪制好的圖像輸出,我們可以調用 canvas 的 toBlob(), toDataURL() 或 getImageData() 方法來獲取到圖像數據。然而,遇到圖片跨域的情況就有些尷尬了。可能回報如下錯誤:

Failed to execute 'toBlob' on 'HTMLCanvasElement': Tainted canvases may not be exported.

或者

Access to image at 'https://your.image.src' from origin 'https://your.website' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

先來看看第2種情況。

Access-Control-Allow-Origin

如果你跨域使用某些圖片資源,并且該服務未正確響應 Access-Control-Allow-Origin 頭信息, 則會報出如下錯誤信息:

Access to image at 'https://your.image.src' from origin 'https://your.website' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

說明不允許跨域訪問,那么你可以試著讓后臺修改 Access-Control-Allow-Origin 的值為 * 或 your.website, 或者改用同域資源(考慮下?)。

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

img.crossOrigin = 'Anonymous'

為避免未經許可拉取遠程網站信息而導致的用戶隱私泄露(如 GPS 等信息,具體可搜索 Exif),在調用 canvas 的 toBlob(), toDataURL() 或 getImageData() 會拋出安全錯誤:

Failed to execute 'toBlob' on 'HTMLCanvasElement': Tainted canvases may not be exported.

如果你的圖片服務允許跨域使用(如果不允許,見上條),那么你該考慮下給 img 元素加上 crossOrigin 屬性,即:

const image = new Image()
image.crossOrigin = 'Anonymous'
image.src = src

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

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

標簽:綏化 赤峰 金昌 阿壩 中山 盤錦 萍鄉 聊城

巨人網絡通訊聲明:本文標題《詳解Canvas 跨域脫坑實踐》,本文關鍵詞  詳解,Canvas,跨域,脫坑,實踐,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Canvas 跨域脫坑實踐》相關的同類信息!
  • 本頁收集關于詳解Canvas 跨域脫坑實踐的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 闸北区| 华容县| 岳普湖县| 上虞市| 汉中市| 凌海市| 龙胜| 西安市| 宁城县| 集安市| 油尖旺区| 织金县| 南岸区| 浠水县| 长顺县| 多伦县| 刚察县| 广宁县| 台北市| 离岛区| 偃师市| 荣昌县| 涿州市| 白山市| 廊坊市| 盘锦市| 安泽县| 酉阳| 聂拉木县| 仁怀市| 纳雍县| 乌拉特中旗| 温泉县| 林芝县| 社会| 淮滨县| 罗甸县| 沁水县| 蒙城县| 台南县| 阿图什市|