使用img.crossOrigin =“ Anonymous”将图像绘制到画布上不起作用

乔伊

在客户端独立的JS应用程序中,我正在尝试制作它,以便可以在画布上调用toDataURL(),在画布上绘制了URL指定的某些图像。即,我可以在文本框中输入要在画布上绘制的任何图像(托管在imgur上)的URL,单击“绘制”按钮,它将在画布上绘制。最终用户应该能够将最终渲染保存为单个图像,为此,我正在使用toDataURL()。

无论如何,直到他们真正解决了烦人的“操作不安全”错误(哎呀,您要告诉最终用户他们可以使用或不能使用自己的数据吗?)之后,我遵循了一种解决方法,据说要添加图像DOM并将其crossOrigin属性设置为“ Anonmyous”,然后将其绘制到画布上。

这是我的代码的完整简化版本(但实际上,会有更多功能):

<!DOCTYPE html5>
<html>
<head>
<style>
#canvas {border:10px solid green;background-color:black;}
#imgbox {border:2px solid black;}
</style>
</head>
<body>
<canvas id="canvas" width=336 height=336></canvas>
<br><br>
<input size=60 id="imgbox">
<input type="submit" value="Draw" onclick=draw()>
<script>
function draw() {
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var img = new Image();
    img.src = document.getElementById("imgbox").value;
    img.crossOrigin = "Anonymous";
    context.drawImage(img, 40, 40);
}
</script>
</body>
</html>

如果没有该img.crossOrigin = "Anonymous";行,我可以http://i.imgur.com/c2wRzfD.jpg在文本框中输入内容,然后单击“绘制”,它将起作用。但是,一旦我添加了这一行,整个事情就破裂了,甚至根本不会被绘制到画布上。

我需要更改以解决此问题?我真的需要能够为最终用户实现功能,以保存最终图像,而编写html5规范的人故意引入此错误是非常令人讨厌的。

用户名

您必须在src之前设置CORS请求-只需将行交换为:

img.crossOrigin = "Anonymous";
img.src = document.getElementById("imgbox").value;

您还需要向图像添加onload处理程序,因为加载是异步的:

img.onload = function() {
    context.drawImage(this, 40, 40);
    // call next step in your code here, f.ex: nextStep();
};
img.crossOrigin = "Anonymous";
img.src = document.getElementById("imgbox").value;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用crossOrigin attr加载图像。在Firefox插件SDK中

来自分类Dev

在Spring Boot中使用@CrossOrigin

来自分类Dev

如何使用Google Chrome扩展程序覆盖用crossorigin =“ anonymous”引用的javascript文件?

来自分类Dev

如何将 crossorigin 添加到 <script> 标签?

来自分类Dev

Javascript setInterval()函数在绘制到画布上不起作用

来自分类Dev

使用回调将图像绘制到画布的Javascript

来自分类Dev

使用数据json将图像发布到服务器不起作用的iOS

来自分类Dev

无法使用画布复制img

来自分类Dev

使用 droidscript 保存画布 img

来自分类Dev

在crossOrigin ='Anonymous'图像上设置base64数据时,Safari为什么会引发CORS错误?

来自分类Dev

如何将“ crossorigin”标签添加到动态加载的脚本中?

来自分类常见问题

crossorigin属性的目的...?

来自分类Dev

使用CSS将img居中

来自分类Dev

Javascript:在画布上绘制矩形在IE上不起作用

来自分类Dev

为什么我必须使用 window.onload 将图像绘制到画布上

来自分类Dev

如何使用jQuery将img更改为amp-img?

来自分类Dev

将setInterval与变量一起使用在iOS上不起作用

来自分类Dev

使用gdrive将文件上传到google驱动器在crontab上不起作用

来自分类Dev

将setInterval与变量一起使用在iOS上不起作用

来自分类Dev

将鼠标悬停在使用以下位置的按钮上不起作用:绝对?

来自分类Dev

使用gdrive将文件上传到google驱动器在crontab上不起作用

来自分类Dev

CSS *:not(img) 不起作用

来自分类Dev

<img>标记在Mozilla Firefox和IE上不起作用...更改斜杠对我不起作用

来自分类Dev

Android Studio-将img复制并粘贴到可绘制文件夹中不起作用

来自分类Dev

Android Studio-将img复制并粘贴到可绘制文件夹中不起作用

来自分类Dev

使用src blob将画布转换为img

来自分类Dev

使用画布drawImage将img分为两半

来自分类Dev

使用php在<img>标记中加载图像

来自分类Dev

使用img src作为背景图像

Related 相关文章

  1. 1

    使用crossOrigin attr加载图像。在Firefox插件SDK中

  2. 2

    在Spring Boot中使用@CrossOrigin

  3. 3

    如何使用Google Chrome扩展程序覆盖用crossorigin =“ anonymous”引用的javascript文件?

  4. 4

    如何将 crossorigin 添加到 <script> 标签?

  5. 5

    Javascript setInterval()函数在绘制到画布上不起作用

  6. 6

    使用回调将图像绘制到画布的Javascript

  7. 7

    使用数据json将图像发布到服务器不起作用的iOS

  8. 8

    无法使用画布复制img

  9. 9

    使用 droidscript 保存画布 img

  10. 10

    在crossOrigin ='Anonymous'图像上设置base64数据时,Safari为什么会引发CORS错误?

  11. 11

    如何将“ crossorigin”标签添加到动态加载的脚本中?

  12. 12

    crossorigin属性的目的...?

  13. 13

    使用CSS将img居中

  14. 14

    Javascript:在画布上绘制矩形在IE上不起作用

  15. 15

    为什么我必须使用 window.onload 将图像绘制到画布上

  16. 16

    如何使用jQuery将img更改为amp-img?

  17. 17

    将setInterval与变量一起使用在iOS上不起作用

  18. 18

    使用gdrive将文件上传到google驱动器在crontab上不起作用

  19. 19

    将setInterval与变量一起使用在iOS上不起作用

  20. 20

    将鼠标悬停在使用以下位置的按钮上不起作用:绝对?

  21. 21

    使用gdrive将文件上传到google驱动器在crontab上不起作用

  22. 22

    CSS *:not(img) 不起作用

  23. 23

    <img>标记在Mozilla Firefox和IE上不起作用...更改斜杠对我不起作用

  24. 24

    Android Studio-将img复制并粘贴到可绘制文件夹中不起作用

  25. 25

    Android Studio-将img复制并粘贴到可绘制文件夹中不起作用

  26. 26

    使用src blob将画布转换为img

  27. 27

    使用画布drawImage将img分为两半

  28. 28

    使用php在<img>标记中加载图像

  29. 29

    使用img src作为背景图像

热门标签

归档