web端截图分享功能(包含部分节点下截图分享保存功能) - pxqwxl/myLearnPoject GitHub Wiki
截图功能:1.先创建一个空的屏幕大小的texture
2.设置相机的目标texutre为次空teutre 然后把当前相机下的节点渲染到此texture中
3 拿到textrue中的像素值(如果需要在某个节点下截图则将当前texture中的像素进行裁剪取到目标节点区域像素
4 创建一个2d画布 把texture中的像素值转成imageData,并设置到画布上 然后从画布中拿到该图片url链接
5 web端由于没有jsb 因此保存只能通过下载的方式 将拿到的url链接进行下载
相关代码:
-
static fileDownload (downloadUrl, type, fileName) {
-
let aLink = document.createElement('a');
-
aLink.style.display = 'none';
-
aLink.href = downloadUrl;
-
aLink.download = fileName + "." + type;
-
// 触发点击-然后移除
-
document.body.appendChild(aLink);
-
aLink.click();
-
document.body.removeChild(aLink);
-
}
-
static screenShort(targetNode?){
-
- let camera = cc.director.getScene().getComponentInChildren(cc.Camera);
-
//创建新的texture
-
let texture = new cc.RenderTexture();
-
texture.initWithSize(cc.winSize.width, cc.winSize.height, (cc.game as any)._renderContext.STENCIL_INDEX8);
-
//创建新的spriteFrame
-
let spriteFrame = new cc.SpriteFrame();
-
camera.targetTexture = texture;
-
camera.render();
-
var data = null
-
let nodeWidth = camera.targetTexture.width;;
-
let nodeHeight = camera.targetTexture.height;
-
if (targetNode == null) {
-
spriteFrame.setTexture(texture);
-
data = camera.targetTexture.readPixels();
-
} else {
-
var target= targetNode.parent.convertToWorldSpaceAR(cc.v2(targetNode.x, targetNode.y));
-
console.log(targetNode.x, targetNode.y, "savexxxxx")
-
console.log(target.x, target.y,"save x y ")
-
let nodeX = target.x - targetNode.width/2;
-
let nodeY = target.y - targetNode.height/2;
-
nodeWidth = targetNode.width;
-
nodeHeight = targetNode.height;
-
//只显示node部分的图片
-
spriteFrame.setTexture(texture, new cc.Rect(nodeX, nodeY, nodeWidth, nodeHeight));
-
var tmp = new Uint8Array(nodeWidth * nodeHeight * 4)
-
data = camera.targetTexture.readPixels(tmp, nodeX, nodeY, nodeWidth, nodeHeight);
-
}
-
let width = nodeWidth
-
let height = nodeHeight
-
var _canvas = document.createElement("canvas")
-
var ctx =_canvas.getContext("2d");
-
_canvas.width = width
-
_canvas.height = height
-
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);
-
}
-
var dataURL = _canvas.toDataURL("image/png");
-
// UiTool.fileDownload(dataURL, "png", "aaa")
-
console.log(dataURL,"dataUrl===")
-
camera.targetTexture = null;
-
}