Canvas - 001 - 图片跨域问题

问题说明 - Canvas 图片跨域数据获取失败

不通过 CORS 可以在 Canvas 画布中使用图片, 显示正常, 但是这样会污染画布。一旦画布被污染,我们就不能读取数据。例如, 你不能再使用画布的 toBlob(), toDataURL()getImageData() 方法, 调用它们会抛出安全错误, 如下图所示。这种机制可以避免未经许可拉取远程网站信息而导致的用户隐私泄露。

在这里插入图片描述

解决方案

HTML 规范中图片有一个 crossOrigin属性,结合合适的 CORS 响应头,就可以实现在画布中使用跨域 元素的图像。

  1. 设置Image对象的的crossOrigin属性;
	let imageSource  = new Image();
	imageSource.setAttribute('crossOrigin', 'anonymous');	
  1. 若设置完之后,抛出异常:has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ head,则需要图片服务器设置:Access-Control-Allow-Origin , 这里已Apache为例:
	1. 编辑文件 httpd.conf,取消 LoadModule headers_module [...] 的注释;
	2. 在需要设置 Access-Control-Allow-Origin 的服务中配置 Header set Access-Control-Allow-Origin "*" 即可;
	3. 重启服务。

完成这步配置之后,前端即可实现canvas的图片跨域访问。

附录
  1. 其它服务器配置 Access-Control-Allow-Origin
  2. jCanvas中的跨域访问配置
	$(’#canvasId‘)
	    .addLayer({
	        type: 'image',
	        source: imageUrl,
	        fromCenter: false,
	        name: "image",
	        x: 0, y: 0,
	        width: 200,
	        height: 200,
	        crossOrigin: "Anonymous",
	    })
	    .drawLayers();
参考网址

Apache解决Access-Control-Allow-Origin多域名跨域问题
Canvas toDataURL图片跨域问题
canvas跨域, has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ head

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值