Amazon S3 图像,无法使用 html5 画布保存,出现受污染的画布错误

Posted

技术标签:

【中文标题】Amazon S3 图像,无法使用 html5 画布保存,出现受污染的画布错误【英文标题】:Amazon S3 image, cannot be saved using html5 canvas, gives Tainted Canvases Error 【发布时间】:2014-07-11 08:38:29 【问题描述】:

在使用画布保存图像时遇到问题(Chrome、Firefox 和 Safari),

当我在 html5 画布中加载托管图像时,画布中显示错误(尽管仅在 Chome 而不是 Firefox 中),图像来自 Amazon S3 服务器:

Image from origin 'https://xxx.s3.amazonaws.com' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9015' is therefore not allowed access.

当我尝试将画布另存为图像时,

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

是的,我已经设置了 CORS 配置,

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

img.crossOrigin = 'something'

我看了Respond Proxy Js,但是不明白怎么用。

我浏览了很多 SO 帖子和其他参考资料,但无法解决问题。任何人都可以为我提供任何解决方案。

@Update:如果我更改行&lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt; => &lt;AllowedOrigin&gt;http://localhost:9015&lt;/AllowedOrigin&gt;,解决方案似乎允许 Chrome 保存画布图像,但问题在 Firefox 和 Safari 中仍然存在

【问题讨论】:

显示与 img 元素相关的所有代码:它是如何创建的、何时设置 crossOrigin 属性、何时设置 src 属性等。所有这些对于解决您的问题都很重要问题 @Ray 抱歉回复晚了,不同的时区,这是我的jsfiddle.net/mandeeeep/Z8cBC/4 【参考方案1】:

在 Firefox 和 IE 中你需要看起来像

<img src="https://platform3-preit-image.s3.amazonaws.com/components/fireside2.png" crossOrigin="anonymous" class="draggable-image" />

在 chrome 中它需要不带crossOrigin。如果您在 chrome 中包含 crossOrigin 属性,它将失败。

<img src="https://platform3-preit-image.s3.amazonaws.com/components/fireside2.png" class="draggable-image" />

所以基本上你需要根据浏览器渲染两个不同的 html 输出。

【讨论】:

在 Firefox 中,我使用crossOrigin="anonymous" 没有任何问题,但我仍然无法保存画布img,如果是chrome,即使我删除了attr 错误是依然执着。你可以看看我的小提琴。 最初的问题是关于画布,而不是 html。 downvoted 就像我做 canvas.imageUrl 时一样,它在 firefox 和 chrome 上都出现了污染错误,尽管图像显示在 ui 上

以上是关于Amazon S3 图像,无法使用 html5 画布保存,出现受污染的画布错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Amazon Educate Starter 账户将图像上传到 S3

可以使用带有 HTML5 播放器的 Amazon S3/CloudFront 流式传输视频吗?

使用 amazon sdk 和存储桶策略从 ios 应用程序将图像上传到 amazon s3

Sonata + Amazon S3 - 无法编写关键内容

屏蔽 Amazon S3 mp3 文件 url 和 html5 移动音频问题

在iOS Swift中不使用AWS SDK在Amazon S3存储桶中上传的背景图像(背景模式)