大佬们,直接扔给我一个能跑起来的代码。
场景就是一个图片
在代码里能拿到他的base64即可。
大佬们,直接扔给我一个能跑起来的代码。
场景就是一个图片
在代码里能拿到他的base64即可。
/**
* @title 将节点内容导出为图片
* @param {cc.Node} node
*/
captureNode2Base64 (node) {
// 初始化渲染纹理
let width = node.width;
let height = node.height;
let w_h = width / height;
let vw_vh = cc.visibleRect.width / cc.visibleRect.height;
let _texture = new cc.RenderTexture();
_texture.initWithSize(width, height, cc.gfx.RB_FMT_S8);
// 获取canvas画布
let _canvas = document.getElementById('capture_canvas');
if (!_canvas) {
_canvas = document.createElement('canvas');
_canvas.setAttribute('id', 'capture_canvas');
}
_canvas.width = width;
_canvas.height = height;
let _ctx = _canvas.getContext('2d');
// 克隆需要渲染的节点
let _content = cc.instantiate(node);
_content.parent = cc.Canvas.instance.node;
_content.position = cc.v3(0, 0, 0);
_content.scale = w_h > vw_vh ? (cc.visibleRect.width / width) + 0.02 : (cc.visibleRect.height / height) + 0.02;
let _camera = _content.addComponent(cc.Camera);
_camera.alignWithScreen = true;
_camera.clearFlags = 7;
_camera.targetTexture = _texture;
_camera.render(_content);
// 渲染图片到canvas
let data = _texture.readPixels();
let rowBytes = width * 4;
for (let row = 0; row < height; row++) {
let srow = height - 1 - row;
let imageData = _ctx.createImageData(width, 1);
let start = srow * width * 4;
for (let i = 0; i < rowBytes; i++) {
imageData.data[i] = data[start + i];
}
_ctx.putImageData(imageData, 0, row);
}
// 销毁临时节点
_content.destroy();
_texture.destroy();
return _canvas.toDataURL("image/png");
},
貌似可以了 我在多测试一下。
如果是视图内容可滚动的话有办法截图吗?
大佬,如果是视图内容可滚动的话有办法截图吗?
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。