/**
* 获取mask
* @returns {Promise<unknown>}
*/
generateMask = () => {
// 非 alpha 为黑色,其他为白色
const resultImage = this.outputHiddenCtx.canvas.toDataURL();
const img = new Image();
img.src = resultImage;
return new Promise((resolve) => {
img.onload = () => {
// 创建一个新的画布和2D上下文
const canvas = document.createElement('canvas');
canvas.width = this.imageSize.width;
canvas.height = this.imageSize.height;
const ctx = canvas.getContext('2d');
// 绘制图像到画布上
ctx.drawImage(img, 0, 0);
// 获取图像数据
const imageData = ctx.getImageData(0, 0, this.imageSize.width, this.imageSize.height);
const data = imageData.data;
// 遍历像素数据,将 alpha 为 0 的像素设置为黑色,其他设置为白色
for (let i = 0; i < data.length; i += 4) {
if (data[i + 3] === 0) {
data[i] = 0; // 红
data[i + 1] = 0; // 绿
data[i + 2] = 0; // 蓝
data[i + 3] = 255; // alpha 设为不透明
} else {
data[i] = 255; // 红
data[i + 1] = 255; // 绿
data[i + 2] = 255; // 蓝
data[i + 3] = 255; // alpha 设为不透明
}
}
// 将修改后的图像数据放回画布
ctx.putImageData(imageData, 0, 0);
// 返回新的 mask 图像的 data URL
resolve(canvas.toDataURL());
};
});
};