php 抓取网页生成图片(图片转base64遇到两个问题.png代码片段)

优采云 发布时间: 2021-11-21 04:10

  php 抓取网页生成图片(图片转base64遇到两个问题.png代码片段)

  使用html5画布将图片绘制到画布上,然后使用画布的toDataURL方法。

  但是,在将图像转换为base64的过程中遇到了两个问题。

  

  图片.png

  代码片段如下:

   var canvas=document.getElementById("canvas"),//获取canvas

ctx = canvas.getContext("2d"), //对应的CanvasRenderingContext2D对象(画笔)

img = new Image(),//创建新的图片对象

base64 = '' ;//base64

img.src = 'http://www.xxxx.png';

ctx.drawImage(img,0,0);

base64 = canvas.toDataURL("image/png");

  这时候我想问题应该是图片在加载之前就已经绘制好了。既然是这种情况,修改如下:

   var canvas=document.getElementById("canvas"),//获取canvas

ctx = canvas.getContext("2d"), //对应的CanvasRenderingContext2D对象(画笔)

img = new Image(),//创建新的图片对象

base64 = '' ;//base64

img.src = 'http://www.xxxx.png';

img.onload = function(){//图片加载完,再draw 和 toDataURL

ctx.drawImage(img,0,0);

base64 = canvas.toDataURL("image/png");

};

  改完后,正要喝一杯水庆祝一下。一刷新页面,一口老血喷了出来,chrome控制台又报如下错误:

  Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

  可能是canvas无法执行toDataURL方法:被污染的canvas无法输出,请原谅我的灵魂翻译。

  google发现原来是受CORS策略限制,会出现跨域问题。虽然可以使用图像(例如附加到页面),但在画布上绘制会污染画布。一旦画布被污染,就无法提取画布数据。例如,您不能使用画布 toBlob()、toDataURL() 或 getImageData() 方法;使用这些方法时,会抛出安全错误

  Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

  具体细节附上一个非常详细的链接如下:,值得一看,个人理解可能不到位,建议阅读此链接。

  解决方案:

  图片设置:crossOrigin 属性

  代码片段:img.setAttribute("crossOrigin",'Anonymous')

  完整代码:

   var canvas=document.getElementById("canvas"),//获取canvas

ctx = canvas.getContext("2d"), //对应的CanvasRenderingContext2D对象(画笔)

img = new Image(),//创建新的图片对象

base64 = '' ;//base64

img.src = 'http://www.xxxx.png';

img.setAttribute("crossOrigin",'Anonymous')

img.onload = function(){//图片加载完,再draw 和 toDataURL

ctx.drawImage(img,0,0);

base64 = canvas.toDataURL("image/png");

};

  关于stackoverflow的解决方案:

  地址:

  Tips:如果遇到其他关于SecurityError的canvas问题,也可以试试这个解决方案。

  另外,经过多次搜索,总结了几个tips

  1:使用谷歌。百度搜了几篇文章,干扰太大。

  2:先搜bug屋:stackoverflow,你的bug总有解决办法,链接:

  3:网页文档之家:Mozilla的网页文档很权威,也很详细。关联:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线