我正在尝试将图像加载到画布元素中,然后在 toDataURL() 中提取数据。
我的网站使用 Ruby on Rails 2.3 运行
我从 aws s3 提供图像。我有设置cors:
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我有一个画布元素:
<canvas id="explain_canvas"></canvas>
好的,那么一些背景。我最初是用这样的代码尝试这个,其中drawing_image只是图像的url。
var outlineImage = new Image();
outlineImage.crossOrigin = '';
outlineImage.src = drawing_image;
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但这不是发送原始标头。所以我想我会尝试通过 jquery 进行 ajax 调用
var outlineImage = new Image();
$(outlineImage).attr('crossOrigin', '');
$.ajax({
type: 'get',
url : drawing_image,
contentType: 'image/png',
crossDomain: 'true',
success: function() {
$(outlineImage).attr("src", drawing_image);
},
error: function() {
console.log('ah crap');
}
});
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但仍然没有运气。我弄错了吗?该 jquery ajax 是否应该发送原始标头?
我查看了请求标头,这就是我在图像上得到的:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:em2-images.s3.amazonaws.com
Referer:http://localhost:3000/courses/18/quizzes/22/take
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11
并且 jquery 错误与此:
XMLHttpRequest cannot load http://em2-images.s3.amazonaws.com/EM2_LF_A_5_item6.png. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
ah crap
对我来说奇怪的是 jquery 说明了来源,但它不在请求标头中。
这个 stackoverflow 问题在这里表明他想删除源头。好吧,他正在做与 jquery ajax 相同的调用并得到它。任何想法为什么我不是?
如果我重新加载页面,它会抓取缓存的图像并正常加载(请注意原始标头)并调用 toDataURL() 就好了。在我清除缓存后,在图像被缓存之前,它在第一次加载时将无法正常工作。
我开始怀疑 Rails 是否对它做了什么,但我不知道它会如何,因为这是一个 ajax 调用。但是谁知道呢,有人知道 Rails 是否可以做到这一点吗?
我已经在不同平台上的几个浏览器中尝试过这个。Chrome、Firefox、Safari、IE 9 和 10。在我的 Mac、PC 和 iPhone 上。他们中的任何一个都没有骰子。
-谢谢-