主要是想对跨域的图片进行裁剪保存
先是出现canvas.toDataURL()报错 网上资料说需要添加crossOrigin="anonymous"允许跨域
但加了之后图片就无法显示了 我又新建了一个页面发现 只要是<img>加了crossOrigin="anonymous"就都无法显示 求大神帮忙,谢谢。
主要是想对跨域的图片进行裁剪保存
先是出现canvas.toDataURL()报错 网上资料说需要添加crossOrigin="anonymous"允许跨域
但加了之后图片就无法显示了 我又新建了一个页面发现 只要是<img>加了crossOrigin="anonymous"就都无法显示 求大神帮忙,谢谢。
跨域图片能正常裁剪(图片未转化成base64),应该满足三个条件:
crossorigin
属性Access-Control-Allow-Origin
主要原因是:
toDataURL()
或者toBlob()
导出数据,见Allowing cross-origin use of images and canvas。 所以通过在img标签上设置crossorigin
,启用CORS,属性值为anonymous
,在CORS请求时不会发送认证信息,见HTML attribute: crossorigin。Access-Control-Allow-Origin
Access-Control-Allow-Origin
,都会导致报错。哇啊啊啊啊啊啊啊啊!!
多谢 @拾指相扣 回答评论下的 @吴观涛 大大提供的方法!!
image.src = url + '?time=' + new Date().valueOf();
简直曲线救国啊啊啊!!一次解决!
完整代码
let image = new Image()
image.setAttribute('crossOrigin', 'anonymous')
image.src = url + '?time=' + new Date().valueOf();
let that = this;
image.onload = () => {
// ... do something
}
image.onerror = (err) => {
console.log(err)
};
canvas无法对跨域的图片进行操作,楼主想要的裁剪保存功能如果在纯前端实现必须使用canvas。所以楼主必须要开启允许跨域,其中,除了服务端要允许当前页面允许跨域之外,楼主执行canvas操作前也要开启跨域。
var img=new Image();
img.crossOrigin="anonymous";
img.src='//';
ctx.drawImage(img, 0, 0, img.width, img.height);
如果服务器配置好允许跨域,仍然出现该问题,那可能是浏览器的缓存机制造成,详细可以看下这篇:<img>图片 crossOrigin=anonymous 导致 onload error 失败
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.8k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
5 回答8k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.8k 阅读
你从哪里找的答案。误人子弟啊,Access-C...A...O...字段是服务端添加了才有的,"响应头中就会附加"是什么鬼,你加了crossOrigin="anonymous"是表明你想跨域获取这张图片,好用在canvas.toDataURL()上,但是服务端不一定同意啊,服务端添加了access...这个字段并且value是*或者你网站的域名才行,否则就认为你无权用,结果就是无法显示
参考:
http://stackoverflow.com/ques...
https://developer.mozilla.org...
https://developer.mozilla.org...