canvas跨域问题

活动页须要合成一张海报,因此要用canvas,一开始我觉得只是简单合成,后来我发现我错了。css

首先我没接触过canvas的任何应用。因此我先上网找了一下教程。。
好像教程都挺简单的前端

1 var canvas=document.getElementById("myCanvas");//获取cnavas那个dom
2 var ctx=canvas.getContext("2d");//貌似是定义为2D
3 var bg = document.getElementById("scream");//获取id为img的dom
4 ctx.drawImage(bg,0,0,750,1159);//把图片插入canvas的方法 

这样就能够搞到图片了 而后用drawImage()方法就能够了。
看完教程我以为,这些玩意Low爆了,简单的一逼~
可是我错了,错的很离谱。。canvas

 


如今存在的两个问题
1.图片加载问题。
2.画图的层级问题。
  第一个问题图片加载问题,我看到网上不少人用.onload();并非说这个方法很差,我我的以为用complete会方便一点。(由于我这边要把多个图片合成一个海报,因此我就定义了一个开关判断这些图片是否都加载了才执行下一步)注:complete的判断依据是图片是否出现过,而后返回的是true or false这里的出现过与display:none之类的css是无关的。彻底是用来判断这个图片是否已经存在网页中,能保证图片彻底加载过,这样就不会使canvas画空了。后端

  第二个问题 图片的层级问题,这个问题只要按顺序写就能够了,最后写的层级最高,因此第一个写的就是背景图了。就是辣么简单!跨域

画完了canvas,就要转换成img图片了,是否是感受soeasy?合成图片的时候,就出现了跨域问题!!没错就是跨域了,这些图片都是一个页面上的,为何会跨域呢?由于他们的文件源不同,因此跨域了!dom

 

 

  那不是很悲剧吗?个人图片有来自本地 (背景图)有来自七牛 有来自其余外链的,那可怎么办啊?做为一个有尊严的前端,怎么能够向后端屈服?咱们要自强不息。测试

这个是忘了是啥时候的截图了。spa

而后我找到了一个属性crossOrigin="anonymous",听说这个能够解决跨域问题,而后我就加上了code

<img id="scream" src="" crossOrigin="anonymous" alt="The Scream" width="220"><!-- 背景图-->

 

 

  好像解决了跨域问题。而后我就高高兴兴的拿给产品看了,可是产品的手机竟然还跨域了!!(吐槽一波,测试机的肾5S都没问题,就他的手机出现了跨域问题。mdzz)Cross-origin image load denied by Cross-Origin Resource Sharing policy.(来自产品手机的报错)这时候没办法,而后我又想了一下,若是所有转换成Base64会不会解决呢?blog

jset do IT,我就去找后端,让他铺模板的时候,把图片地址换成base64,然鹅其余手机依旧正常,产品的手机依旧有问题

 


  这时候我只能跪着去找后端了,把全部的图片都转换成同源了,后端dalao抚摸着个人头,轻轻的说了一句,“好的”。
最后今天的全部问题都解决了!对了 好像忘了说转换成图片用什么方法了。

$('#img').attr('src',canvas.toDataURL());//canvas.toDataURL()就是把图片转换成base64 而后用JQ的attr插进去

 

相关文章
相关标签/搜索