在Go中捕获屏幕?

use*_*993 13 go

是否有一种跨平台的方式来捕获Google的Go中的屏幕?或者任何方式,但跨平台将是首选.

Kes*_*ion 7

现在有:

https://github.com/vova616/screenshot

go get github.com/vova616/screenshot

例:

package main

import "github.com/vova616/screenshot"

func main() {
    img, err := screenshot.CaptureScreen() // *image.RGBA
    myImg := image.Image(img) // can cast to image.Image, but not necessary
}
Run Code Online (Sandbox Code Playgroud)

如果您还需要macOS支持(在合并拉取请求之前),请获取:

https://github.com/kesarion/screenshot


rpu*_*kar 6

不幸的是,没有图书馆可以做到这一点.magickwand有几个绑定(C编程语言和ImageMagick图像处理库),请参阅http://go-lang.cat-v.org/library-bindings但这些都不完整,没有屏幕截图功能.

同时,正如GeertJohan建议的那样,您可以使用os.exec运行外部程序并捕获屏幕(请参阅下面的示例代码).例如,您可以使用import来自imagemagick的命令来捕获屏幕(应该在可以运行imagemagick的平台上工作)

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
)

func main() {

    var buf bytes.Buffer

    path, err := exec.LookPath("import")
    if err != nil {
        log.Fatal("import not installed !")
    }
    fmt.Printf("import is available at %s\n", path)

    cmd := exec.Command("import", "-window", "root", "root.png")

    cmd.Stdout = &buf
    cmd.Stderr = &buf

    err = cmd.Run()
    if err != nil {
        panic(err)
    }
    fmt.Println(buf.String())
}
Run Code Online (Sandbox Code Playgroud)


Gee*_*han 0

我找不到一个图书馆来做到这一点。稳定的跨平台截屏需要大量的工作。屏幕捕获需要与操作系统的显示管理器/服务器或帧缓冲区连接,这对于许多操作系统和 Linux 发行版来说是不同的。您必须为每个操作系统 API 编写接口(或包装提供功能的库),然后将所有不同的方法抽象到一个包中,以便它可以跨平台工作。

另一种方法是运行现有的屏幕捕获应用程序(命令行)来为您完成屏幕捕获工作,包括保存到文件。然后在你的 go 应用程序中读取该文件。要使 Go 应用程序运行第三方应用程序,请使用os/exec包,它位于标准库中。对于 Linux,您可以使用fbgrab将帧缓冲区保存到 png 文件。