JS截图问题(寻找Canvas toDataURL 空白问题的解决方案)

背景:

使用js截图当前页面的某个位置上传到服务器

寻找方案:

使用 html2canvas 方案
http://html2canvas.hertzen.com/

html2canvas(document.querySelector("#abc")).then(canvas => {
    document.body.appendChild(canvas)
});

使用Canvas toDataURL的方案
https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toDataURL

var canvas = document.getElementById("abc");
var dataURL = canvas.toDataURL();

发现问题:

需要截图的地方是一个使用canvas绘制的,但是普通的canvas绘制的使用html2canvas也是OK的。这里会出现截图不完整的情况。
Canvas toDataURL 发现仍然是空白

可能正如网上所说,Canvas使用的事webgl来渲染的。
https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement

getContext(in DOMStringcontextId) 
object 
返回canvas的绘制上下文,如果指定的上下文ID不支持,则返回null.一个绘制上下文可以让你在canvas上绘图.
目前可接受的参数有"2d"和"experimental-webgl"."experimental-webgl"上下文只在那些实现了WebGL的浏览器上可用.
调用getContext("2d")会返回一个 CanvasRenderingContext2D对象,
调用getContext("experimental-webgl")会返回一个WebGLRenderingContext对象.

https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext

var canvas = document.getElementById('myCanvas');
var gl = canvas.getContext('webgl');

最终方案:

 var canvas = document.getElementById('abc');
 var gl = canvas.getContext('webgl');
 gl.canvas.toDataURL();

还可以有一些参数来配合:
.getContext("experimental-webgl", {preserveDrawingBuffer: true});
.toDataURL();
oDataURL(in optional DOMString type, in any ...args) 
DOMString 
返回一个data: URL,根据type参数指定的类型将包含在canvas中的图片文件编码成字符串形式,
 type参数的默认值为image/png.如果该canvas的宽度或长度是0,则会返回字符串"data:,".
 如果指定的type参数不是image/png,但返回的字符串是以data:image/png开头的,
 则所请求的图片类型不支持.Chrome支持image/webp类型.如果type参数的值为image/jpeg或image/webp,
 则第二个参数的值如果在0.0和1.0之间的话,会被看作是图片质量参数,如果第二个参数的值不在0.0和1.0之间,则会使用默认的图片质量.

原创文章,版权所有,禁止抄袭,违者必究!!!转载请注明出处!!!技术需要请联系3684170@qq.com.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hassen2010

你的鼓励我能输出跟多的好文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值