本人现在在做 pear-rec ( https://github.com/027xiguapi/pear-rec ),一个用 electron 可以截图和图片编辑查看的跨平台软件,现在想实现实现类似 QQ 的长截图(滚动截图),一直没有思路,大佬们,有知道怎么实现的吗?
试试跟随用户鼠标事件连续截图+拼接呢?不确定QQ怎么实现的但是调用Windows API很显然不能做到跨端,不过这样不确定Electron的Transparent Window能不能做到
下面是ai生成的,可以参考,你也可以自己问问ai思路
在Electron中实现长截图的方法与使用其他编程语言和框架时类似。下面是一种基本的思路:
获取需要截图的内容,可以是整个窗口或某个特定区域。
将截图内容保存到临时文件中。Electron提供了屏幕捕获API desktopCapturer 来截取指定区域的屏幕内容。
使用一个第三方库来将多个截图合并为长图。比如使用Node.js的图像处理库 sharp 或者 canvas。
以下是一个简单的示例代码,展示了如何在Electron中实现长截图:
javascript
const { app, BrowserWindow, ipcMain, desktopCapturer } = require('electron');
const sharp = require('sharp');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
});
mainWindow.loadURL('http://example.com'); // 加载需要截图的页面
mainWindow.webContents.on('did-finish-load', () => {
// 当页面加载完成后进行截图操作
captureScreen();
}
async function captureScreen() {
const sources = await desktopCapturer.getSources({ types: ['window', 'screen'] });
// 选择需要截图的源,这里假设选择第一个窗口
const source = sources[0];
const stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id,
minWidth: 800,
minHeight: 600,
maxWidth: 800,
maxHeight: 600,
},
const videoTrack = stream.getVideoTracks()[0];
const imageCapture = new ImageCapture(videoTrack);
const chunks = [];
// 监听视频数据
videoTrack.onended = () => {
const completeBuffer = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.byteLength, 0));
let offset = 0;
for (const chunk of chunks) {
completeBuffer.set(new Uint8Array(chunk), offset);
offset += chunk.byteLength;
// 将截取的视频数据转为图片
sharp(Buffer.from(completeBuffer))
.toFile('long_screenshot.png', (err, info) => {
if (err) {
console.error(err);
return;
console.log(info);
};
const reader = videoTrack.readable.getReader();
// 监听可读流数据
reader.read().then(function process({ done, value }) {
if (done) return;
chunks.push(value.buffer);
return reader.read().then(process);
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
在上述代码中,我们使用desktopCapturer API选择了需要截图的源(这里假设为第一个窗口),然后使用getUserMedia API从源中获取视频流。将视频流的数据收集到数组中,并使用sharp库将数据转换为图片,并保存为long_screenshot.png。通过这种方式,我们最终得到了一张长截图。
请注意,上述代码只是一个简单的示例供参考。实际开发中,您可能需要根据具体需求进行定制和优化。
胖虎_ 下面是ai生成的,可以参考,你也可以自己问问ai思路 在Electron中实现长截图的方法与使用其他编程语言和框架时类似。下面是一种基本的思路: 获取需要截图的内容,可以是整个窗口或某个特定区 ...
谢谢