我正在将fabricjs与angularjs应用程序集成。我从第三方来源(不在我的控制范围内)中提取图像。我希望对它执行一些操作,例如:过滤,添加到画布,存储到画布以及从画布重新加载。
我正在使用带有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'
});
我有什么问题吗?
答案 0 :(得分:4)
crossOrigin
只有请求权限才能通过CORS使用资源,但服务器可以拒绝它,以防万一也会使图像加载失败。
唯一的方法是将图像上传到您自己的服务器(不需要crossOrigin
)或使用CORS代理(仍然需要crossOrigin
)或将图像上传到允许的主机CORS用法(imgur.com和dropbox.com就是几个例子)。所有这些解决方法都可能涉及用户权利问题。
答案 1 :(得分:3)
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中使用crossOrigin = 'anonymous'
在html
4:如果您的网站不安全,并且您想要从安全网站中提取图片,则会出现 cors 错误
例如: https与http
您正在localhost:7000
(不安全)并希望从中提取图像
https://hello.com/image2.png
(安全)
您正在http://www.hiee.com
并希望从中提取图像
https://hello.com/image2.png
(安全)
5:如果你还有cors问题,那么你要从中提取图像的服务器也应该发送带有图像"Access-Control-Allow-Origin", "*"
的这些标题。那么如何检查这些标题,是在浏览器标签中打开图像然后是firebug-&gt ;网络,见标题
6:enable / disable web security in browser like
注意:这将是仅适用于本地环境的临时解决方案,但是当您从其他网络中的浏览器访问相同的URL时,CORS问题将再次出现。
答案 2 :(得分:2)
试试这个:
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'});