91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

html5中如何實現Canvas跨域脫坑

發布時間:2022-02-22 14:12:22 來源:億速云 閱讀:290 作者:小新 欄目:開發技術

小編給大家分享一下html5中如何實現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

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

以上是“html5中如何實現Canvas跨域脫坑”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

仁布县| 天峻县| 上虞市| 高平市| 宝山区| 南靖县| 宝丰县| 永春县| 黑河市| 红桥区| 会东县| 安徽省| 寿阳县| 陆川县| 香格里拉县| 佳木斯市| 七台河市| 社会| 龙海市| 长汀县| 丰都县| 靖安县| 昌都县| 肥西县| 萍乡市| 平顺县| 怀安县| 东光县| 特克斯县| 新泰市| 喜德县| 徐水县| 东安县| 扶风县| 衡阳县| 祁门县| 西盟| 方山县| 肃南| 海城市| 广河县|