我是JavaScript / Node.js和图像处理的新手,我想获取人偶屏幕截图的输出(最好是在内存中),然后能够遍历图像中每个像素的颜色,然后围绕特定图片(x,y,宽度,高度),然后使用Node.js将带有矩形突出显示的图片保存到文件中。
我从p中得到的是
返回:
<Promise<string|Buffer>>
承诺将捕获的屏幕快照解析为缓冲区或base64字符串(取决于编码的值)。
我读到可以使用puppeteer创建画布对象来执行此操作,但是我不确定这种解决方案,尤其是检索像素颜色时。我不知道是否应该为该软件包或其他软件包使用像PureImage这样的软件包。
这是我的代码。
async function (rectangle1, rectangle2, screenshot) {
let screenshotHighlighted = await driver.page.evaluate(async function (rectangle1, rectangle2, screenshot) {
let image = new Image();
let imgLoadPromise = async function(){ return new Promise((resolve, reject) => {
image.onload = () => {console.log('loaded'); return resolve};
image.onerror = reject;
});}
image.src = 'data:image/png;base64,' + screenshot;
await imgLoadPromise;
let canvas = document.createElement("CANVAS");
let context = canvas.getContext("2d");
canvas.width = image.naturalWidth;
canvas.height = image.naturalHeight;
context.drawImage(image, 0, 0);
//solid black and dashed red
context.strokeStyle = "black";
context.strokeRect(rectangle1.minX, rectangle1.minY, rectangle1.width, rectangle1.height);
context.setLineDash([5, 10]);
context.strokeStyle = "red";
context.strokeRect(rectangle1.minX, rectangle1.minY, rectangle1.width, rectangle1.height);
context.setLineDash([]);
//solid black and dashed yellow
context.strokeStyle = "black";
context.strokeRect(rectangle2.minX, rectangle2.minY, rectangle2.width, rectangle2.height);
context.setLineDash([5, 10]);
context.strokeStyle = "yellow";
context.strokeRect(rectangle2.minX, rectangle2.minY, rectangle2.width, rectangle2.height);
return canvas.toDataURL();
}, rectangle1, rectangle2, screenshot);
return screenshotHighlighted;
}
将文件保存在Node.JS中
fs.writeFile(path.join(directory,imageFileName),highlightedScreenshot.split(',')[1], 'base64',
function(err) {
if(err) {
console.log('ERROR IN SAVING IMAGE');
console.log(err);
}
});
可以在以下答案中找到遍历HTML画布的像素