ScreenShoot.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. cc.Class({
  2. extends: cc.Component,
  3. properties: {
  4. },
  5. start()
  6. {
  7. let self =this;
  8. let url = '';
  9. this.scheduleOnce(function(){
  10. url = self.screenshot().src;
  11. console.log(url)
  12. },2);
  13. // this.scheduleOnce(function(){
  14. // self.setConsoleImage(url);
  15. // },4);
  16. },
  17. screenshot() {
  18. let node = cc.director.getScene().getChildByName("Canvas").getChildByName("screenshot");
  19. let camera = node?.getComponent(cc.Camera);
  20. if(!node){
  21. node = new cc.Node("screenshot");
  22. node.parent = cc.director.getScene().getChildByName("Canvas");
  23. camera = node.addComponent(cc.Camera);
  24. }
  25. // 设置你想要的截图内容的 cullingMask
  26. // camera.cullingMask = 0xffffffff;
  27. // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
  28. let texture = new cc.RenderTexture();
  29. texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height);
  30. camera.targetTexture = texture;
  31. // 渲染一次摄像机,即更新一次内容到 RenderTexture 中
  32. camera.render();
  33. // 这样我们就能从 RenderTexture 中获取到数据了
  34. let data = texture.readPixels();
  35. // 接下来就可以对这些数据进行操作了
  36. let canvas = document.createElement("canvas");
  37. let ctx = canvas.getContext("2d");
  38. canvas.width = texture.width;
  39. canvas.height = texture.height;
  40. let width = texture.width;
  41. let height = texture.height;
  42. let rowBytes = width * 4;
  43. for (let row = 0; row < height; row++) {
  44. let srow = height - 1 - row;
  45. let imageData = ctx.createImageData(width, 1);
  46. let start = srow * width * 4;
  47. for (let i = 0; i < rowBytes; i++) {
  48. imageData.data[i] = data[start + i];
  49. }
  50. ctx.putImageData(imageData, 0, row);
  51. }
  52. let dataURL = canvas.toDataURL("image/jpeg");
  53. let img = document.createElement("img");
  54. img.src = dataURL;
  55. return img;
  56. },
  57. setConsoleImage(url) {
  58. var img = new Image();
  59. img.style.display = "none";
  60. document.body.appendChild(img);
  61. img.src = url;
  62. img.onload = function () {
  63. var css = [
  64. "padding: " + (img.height / 2 - 8) + "px " + img.width / 2 + "px;",
  65. "line-height: " + img.height + "px;",
  66. "background-image: url(" + url + ");",
  67. ];
  68. console.log("%c ", css.join(""));
  69. };
  70. }
  71. });