使用 fabric.fromUrl 时的 CORS 问题
CORS issue when using fabric.fromUrl
我正在将 fabricjs 与 angularjs 应用程序集成。我正在从第三方来源(不在我的控制范围内)中提取图像。我希望对其执行一些操作,例如:过滤、添加到 canvas、存储到 canvas 并从 canvas.
重新加载
我正在使用带有 crossorigin 的 fabric fromurl 调用,但每次都失败。
fabric.Image.fromURL('http://img.fkcdn.com/image/dining-chair/b/g/y/fidcbennywncsach-1-cedar-pine-devdar-home-cherry-white-original-imae9fsfbkxrgebt.jpeg', function (img) {
canvas1.add(img.set({
left: 50,
top: 50,
angle: 30
}));
console.log('CORS enabled + crossOrigin property - DataURL: ', canvas1.toDataURL());
}, {
crossOrigin: 'Anonymous'
});
我做错了什么吗?
crossOrigin
只会 请求 通过 CORS 使用资源的权限,但服务器可以拒绝它,以防万一加载图像也会失败。
唯一的解决方法是将图像上传到您自己的服务器(不需要 crossOrigin
)或使用 CORS 代理(crossOrigin
仍然需要)或将图像上传到主机允许使用 CORS(imgur.com 和 dropbox.com 是几个例子)。所有这些解决方法都可能涉及用户权限问题。
Fabricjs 代码片段
fabric.util.loadImage(img.src, function(any image url on website) {
var object = new fabric.Image(any image url on website);
object.set({
id: 'bg',
width: 100,
height: 100,
left: 20,
top: 30
});
canvas.add(object);
}, null, {
crossOrigin: 'anonymous'
})
避免 fabricjs 中的 Cors 问题
1 : 使用 fabric.util.loadImage
而不是 fabric.Image.fromURL
2 : fabric.util.loadImage
有 3 个参数,第 3 个参数应该是 crossOrigin: 'anonymous'
就像下面的代码
3 : 如果您在 html 中显示图片,请在 html
中的图片标签中使用 crossOrigin = 'anonymous'
4 : 如果 你的网站不安全 并且你想从安全的 中提取图像,将会出现 cors 错误网站
例如:https 与 http
你在 localhost:7000
(不安全)并且想从
https://hello.com/image2.png
(安全)
你在 http://www.hiee.com
并且想从
https://hello.com/image2.png
(安全)
5:如果你仍然有 cors 问题,那么你从中提取图像的服务器也应该发送这些 headers 和图像 "Access-Control-Allow-Origin", "*"
。那么如何检查这些 headers,在浏览器选项卡中打开图像然后 firebug->network ,请参阅 headers
6 : enable / disable web security in browser like
注意:这将是仅适用于本地环境的临时解决方案,但是当您从其他网络中的浏览器访问相同的 url 时,CORS 问题将再次出现。
试试这个:
fabric.Image.fromURL('http://img.fkcdn.com/image/dining-chair/b/g/y/fidcbennywncsach-1-cedar-pine-devdar-home-cherry-white-original-imae9fsfbkxrgebt.jpeg', function (img) {
canvas1.add(img.set({
left: 50,
top: 50,
angle: 30
}));
console.log('CORS enabled + crossOrigin property - DataURL: ', canvas1.toDataURL());}, null,{
crossOrigin: 'Anonymous'});
我正在将 fabricjs 与 angularjs 应用程序集成。我正在从第三方来源(不在我的控制范围内)中提取图像。我希望对其执行一些操作,例如:过滤、添加到 canvas、存储到 canvas 并从 canvas.
重新加载我正在使用带有 crossorigin 的 fabric fromurl 调用,但每次都失败。
fabric.Image.fromURL('http://img.fkcdn.com/image/dining-chair/b/g/y/fidcbennywncsach-1-cedar-pine-devdar-home-cherry-white-original-imae9fsfbkxrgebt.jpeg', function (img) {
canvas1.add(img.set({
left: 50,
top: 50,
angle: 30
}));
console.log('CORS enabled + crossOrigin property - DataURL: ', canvas1.toDataURL());
}, {
crossOrigin: 'Anonymous'
});
我做错了什么吗?
crossOrigin
只会 请求 通过 CORS 使用资源的权限,但服务器可以拒绝它,以防万一加载图像也会失败。
唯一的解决方法是将图像上传到您自己的服务器(不需要 crossOrigin
)或使用 CORS 代理(crossOrigin
仍然需要)或将图像上传到主机允许使用 CORS(imgur.com 和 dropbox.com 是几个例子)。所有这些解决方法都可能涉及用户权限问题。
Fabricjs 代码片段
fabric.util.loadImage(img.src, function(any image url on website) {
var object = new fabric.Image(any image url on website);
object.set({
id: 'bg',
width: 100,
height: 100,
left: 20,
top: 30
});
canvas.add(object);
}, null, {
crossOrigin: 'anonymous'
})
避免 fabricjs 中的 Cors 问题
1 : 使用 fabric.util.loadImage
而不是 fabric.Image.fromURL
2 : fabric.util.loadImage
有 3 个参数,第 3 个参数应该是 crossOrigin: 'anonymous'
就像下面的代码
3 : 如果您在 html 中显示图片,请在 html
中的图片标签中使用crossOrigin = 'anonymous'
4 : 如果 你的网站不安全 并且你想从安全的 中提取图像,将会出现 cors 错误网站
例如:https 与 http
你在
localhost:7000
(不安全)并且想从https://hello.com/image2.png
(安全)你在
http://www.hiee.com
并且想从https://hello.com/image2.png
(安全)
5:如果你仍然有 cors 问题,那么你从中提取图像的服务器也应该发送这些 headers 和图像 "Access-Control-Allow-Origin", "*"
。那么如何检查这些 headers,在浏览器选项卡中打开图像然后 firebug->network ,请参阅 headers
6 : enable / disable web security in browser like
注意:这将是仅适用于本地环境的临时解决方案,但是当您从其他网络中的浏览器访问相同的 url 时,CORS 问题将再次出现。
试试这个:
fabric.Image.fromURL('http://img.fkcdn.com/image/dining-chair/b/g/y/fidcbennywncsach-1-cedar-pine-devdar-home-cherry-white-original-imae9fsfbkxrgebt.jpeg', function (img) {
canvas1.add(img.set({
left: 50,
top: 50,
angle: 30
}));
console.log('CORS enabled + crossOrigin property - DataURL: ', canvas1.toDataURL());}, null,{
crossOrigin: 'Anonymous'});