【问题标题】:canvas toDataURL() - operation is insecurecanvas toDataURL() - 操作不安全
【发布时间】:2016-04-26 18:33:15
【问题描述】:

我正在使用 fabric.js 在页面上绘制注释。现在我想按原样保存注解页面,而不是使用 JSON 重绘服务器端的所有元素。

我将主图像加载为:

function redrawPage(src) {
                var deferred = $q.defer();

                fabric.Image.fromURL(src, function (img) {
                    zoom.reset();
                    transformation.reset();

                    mainImage = img;
                    mainImage.set({
                        left: 0,
                        top: 0
                    });
                    mainImage.hasRotatingPoint = true;
                    mainImage.selectable = false;

                    canvas.clear();
                    canvas.setWidth(mainImage.getWidth());
                    canvas.setHeight(mainImage.getHeight());
                    canvas.add(mainImage);

                    canvas.renderAll();

                    deferred.resolve();
                });

                return deferred.promise;
            }

当我想发送画布图像数据以存储为原始图像的注释版本时,我收到“操作不安全”错误。

function getImageData() {
    var context = canvas.getContext('2d'),
        imageData = context.getImageData(0, 0, canvas.width, canvas.height);

    return imageData.data;
}

我从中加载图像的网络服务器不允许将 crossOrigin 设置为“匿名”

【问题讨论】:

    标签: angularjs canvas cors fabricjs


    【解决方案1】:

    如果图像主机不允许匿名访问,那么您的 .getImageData.toDataURL 将始终失败,因为画布已被污染。没有持久的解决方法。

    您可以将图像复制(或重新路由)到您自己的服务器,并从与您的网页相同的域传送它。这满足了跨域限制,因此您的画布不会被污染并且您的 .getImageData 将成功。当然,版权法也适用。

    还有其他几种解决方法需要用户确认他们希望以跨域兼容的方式加载图像。这是一个相关的Stackoverflow post

    【讨论】:

    • 图像是从我的子域 http//api.mdomain.com 呈现的,但出于安全原因,我不能允许 CORS 匿名访问所有请求
    • Serverside: The server must be configured to return header(s) indicating that the response contains authorized content. 你能给我一个例子如何设置服务器来实现这个
    • 我正要说:-) ... 除了匿名访问之外,您还可以将图像服务器设置为传送到授权目的地。如果您的设计允许向您的授权客户提供凭据,您可以使用凭据提供跨域兼容图像。这是authoritative link on configuring CORS enabled servers
    • 我正在删除用作文档页面的图像,并在没有它的情况下从画布中检索 img 数据
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2017-03-22
    • 2014-11-26
    • 2013-07-20
    相关资源
    最近更新 更多