如何解决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画一个微笑的表情(代码示例)

html5 canvas如何绘制圆形?(代码实例)

图文详解如何用canvas画实心圆和空心圆

如何使用html5 canvas绘制文字的轮廓

canvas学习系列一:初识canvas

如何用canvas绘制矩形?canvas画矩形的两种方法介绍

如何用html5中的canvas实现渐变文字的效果

html5中canvas的问题总结

html5 canvas图像处理的实现代码分享

html5和js绘制图片到canvas的方法

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




打赏

取消

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

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

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

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

评论

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