我尝试使用robotjs(http://robotjs.io/)从屏幕捕获并保存图像,但是当我打开文件位图时,图像的格式不正确。这是我的代码:
var robot = require("robotjs");
var fs = require("fs");
var size = 10;
var img = robot.screen.capture(0, 0, size, size);
fs.writeFileSync('img.bmp',img.image);
答案 0 :(得分:2)
请注意,来自Robotjs的img.image
缓冲区是带有像素的原始缓冲区;不是BMP或PNG或任何其他格式。
您应该进行一些数据转换,并且可能使用支持写入文件的库来保存它(我在Robotjs中没有看到)。
请查看此other question,它还使用robot.screen.capture
并使用Jimp库将文件保存到PNG文件。该代码也回答了你的问题。
答案 1 :(得分:1)
Jimp支持将https://v1.vuejs.org/guide/events.html即时转换为PNG,并且工作速度更快。
let robot = require("robotjs");
let Jimp = require('jimp');
const img = robot.screen.capture(0, 0, width, height).image;
new Jimp({data: img, width, height}, (err, image) => {
image.write(fileName);
});
将以错误的颜色保存图像。要修复它,您可以使用以下代码:
function screenCaptureToFile2(robotScreenPic, path) {
return new Promise((resolve, reject) => {
try {
const image = new Jimp(robotScreenPic.width, robotScreenPic.height);
let pos = 0;
image.scan(0, 0, image.bitmap.width, image.bitmap.height, (x, y, idx) => {
image.bitmap.data[idx + 2] = robotScreenPic.image.readUInt8(pos++);
image.bitmap.data[idx + 1] = robotScreenPic.image.readUInt8(pos++);
image.bitmap.data[idx + 0] = robotScreenPic.image.readUInt8(pos++);
image.bitmap.data[idx + 3] = robotScreenPic.image.readUInt8(pos++);
});
image.write(path, resolve);
} catch (e) {
console.error(e);
reject(e);
}
});
}
var pic = robot.screen.capture();
screenCaptureToFile2(pic)