如何解决canvas绘图时遇到的跨域问题


本文摘自PHP中文网,作者不言,侵删。

这篇文章主要介绍了详解canvas绘图时遇到的跨域问题的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。

当在canvas中绘制一张外链图片时,我们会遇到一个跨域问题。

示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<!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功能:

阅读剩余部分

相关阅读 >>

canvas波浪效果的实现代码

详解canvas实现圆弧、圆环进度条的实例方法

html5联合canvas实现图片压缩

canvas实现高阶贝塞尔曲线

html5 canvas实现画直线与设置线条的样式

使用canvas设计出一个简易的画板

canvas 学习 3---画坐标系

canvas实现动态粒子连线效果(附代码)

关于canvas的一个实例教程--刮刮乐

html5 canvas平铺的代码详解

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...