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

溫馨提示×

溫馨提示×

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

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

怎么解決canvas繪圖時遇到的跨域問題

發布時間:2020-09-28 15:55:12 來源:億速云 閱讀:176 作者:小新 欄目:web開發

這篇文章主要介紹了怎么解決canvas繪圖時遇到的跨域問題,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

當在canvas中繪制一張外鏈圖片時,我們會遇到一個跨域問題。

示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>crossorigin</title>
</head>
<body>
    <canvas width="600" height="300" id="canvas"></canvas>
    <img id="image" alt="">
    <script>
        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d');
        var image = new Image();
        image.onload = function() {
            ctx.drawImage(image, 0, 0);
            document.getElementById('image').src = canvas.toDataURL('image/png');
        };
        image.src = 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3497300994,2503543630&fm=27&gp=0.jpg';
    </script>
</body>

當在瀏覽器中打開這個頁面時,你會發現這個問題:

Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

這是受限于 CORS 策略,會存在跨域問題,雖然可以使用圖像,但是繪制到畫布上會污染畫布,一旦一個畫布被污染,就無法提取畫布的數據,比如無法使用使用畫布toBlob(),toDataURL(),或getImageData()方法;當使用這些方法的時候 會拋出上面的安全錯誤

這是一個苦惱的問題,但幸運的是img新增了crossorigin屬性,這個屬性決定了圖片獲取過程中是否開啟CORS功能:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>crossorigin</title>
</head>
<body>
    <canvas width="600" height="300" id="canvas"></canvas>
    <img id="image" alt="">
    <script>
        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d');
        var image = new Image();
        image.setAttribute('crossorigin', 'anonymous');
        image.onload = function() {
            ctx.drawImage(image, 0, 0);
            document.getElementById('image').src = canvas.toDataURL('image/png');
        };
        image.src = 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3497300994,2503543630&fm=27&gp=0.jpg';
    </script>
</body>

對比上面兩段JS代碼,你會發現多了這一行:

image.setAttribute('crossorigin', 'anonymous');

就是這么簡單,完美的解決了!

感謝你能夠認真閱讀完這篇文章,希望小編分享怎么解決canvas繪圖時遇到的跨域問題內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

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

AI

钟祥市| 富民县| 化隆| 徐州市| 延安市| 海兴县| 平陆县| 科技| 甘德县| 三门峡市| 东乡| 蓬溪县| 华容县| 文山县| 鄂托克旗| 黄平县| 疏勒县| 长海县| 饶平县| 城固县| 新营市| 磴口县| 海盐县| 怀集县| 京山县| 图们市| 察隅县| 西华县| 庆安县| 藁城市| 镇远县| 泌阳县| 北安市| 邻水| 土默特左旗| 东宁县| 布拖县| 高邮市| 和政县| 建湖县| 清新县|