-
Creator 版本:2.4.0
-
目标平台: web
我想实现动态生成图片的需求,但是生成前的图片,和生成后的图片有差别,所以使用camera直接截取屏幕不太好,我想用原生标签去加载,然后html2canvas生成图片,但是我不知道img.src的路径该怎么写。请大佬指教
什么差别?讲出来,还可能给你提供解决问题的方法
就是截图之前,图上面有俩按钮,我需要生成没有按钮的,不知道该怎么弄
,求大佬帮忙解答。
什么用途呢
这个为什么要用截图呢?你不是有了源文件吗?直接Sprite展示不行吗?
function downloadDomImage (url, options, onComplete) {
var { options, onComplete } = parseParameters(options, undefined, onComplete);
var img = new Image();
if (window.location.protocol !== 'file:') {
img.crossOrigin = 'anonymous';
}
function loadCallback () {
img.removeEventListener('load', loadCallback);
img.removeEventListener('error', errorCallback);
onComplete && onComplete(null, img);
}
function errorCallback () {
img.removeEventListener('load', loadCallback);
img.removeEventListener('error', errorCallback);
onComplete && onComplete(new Error(cc.debug.getError(4930, url)));
}
img.addEventListener('load', loadCallback);
img.addEventListener('error', errorCallback);
img.src = url;
return img;
}
引擎源码,参考一下 download-dom-image.js
想下载下来呢
Sprite有没有什么办法保存下来
好的,感谢大佬,我去研究研究
你通过Sprite能拿到SpriteFrame,再通过SpriteFrame能拿到Texture2D,根据Texture2D代入到下方代码的targetTexture2D试试
import { _decorator, Component, Node, Sprite } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('TTTT')
export class TTTT extends Component {
@property({ displayName: "test", type: Sprite })
private test: Sprite = null;
public onLoad(): void {
window["TTTT"] = this;
}
public download(): void {
// 需要关闭该图片的自动图集合入
let targetTexture2D = this.test.spriteFrame.texture;
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
canvas.width = targetTexture2D.width;
canvas.height = targetTexture2D.height;
ctx.drawImage(targetTexture2D.getHtmlElementObj(), 0, 0, targetTexture2D.width, targetTexture2D.height);
let dataURL = canvas.toDataURL("image/png");// 拿到base64
// base64转化可下载的文件
let arr = dataURL.split(',');
let bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
// 下载
let downloadEl = document.getElementById('file_download');
if (!downloadEl) {
downloadEl = document.createElement('a');
downloadEl.id = 'file_download';
}
// 绑定文件信息
downloadEl.href = window.URL.createObjectURL(new Blob([u8arr], { type: "image/png" }));
downloadEl.download = "测试";
downloadEl.click();
window.URL.revokeObjectURL(downloadEl.href);
}
}
感谢大佬 
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。