Вот мой код, который ....
- Обработка снимка экрана base64, сделанного Puppeteer.
- Создать элемент изображения.
- Дождитесь события загрузки изображения.
- установите для снимка экрана атрибут sr c изображения.
- Создайте холст, не прикрепленный к DOM, и запишите на него изображение .
- Нанесите два прямоугольника на холст.
- верните данные холста.
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 можно найти в следующем ответе
Получить пиксели от HTML Canvas