在Go中捕获屏幕?

时间:2012-12-09 19:22:59

标签: go

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

7 个答案:

答案 0 :(得分: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
}

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

https://github.com/kesarion/screenshot

答案 1 :(得分:6)

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

同时,正如GeertJohan建议的那样,您可以使用os.exec运行外部程序并捕获屏幕(请参阅下面的示例代码)。例如,您可以使用imagemagick中的import命令来捕获屏幕(应该在可以运行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())
}

答案 2 :(得分:1)

我不知道任何跨平台库,但是当存在X服务器时,您可以使用xgbutil库执行此操作。您可以看到example of how to capture a screenshot here

如果你想在Mac / Windows系统上运行,我可能首先检查go.wde的来源,其中包括Windows和Mac的后端。我怀疑你会直接找到代码来捕获那里的截图,但它可能会给你一些提示或路径。

答案 3 :(得分:1)

没有跨平台的方式来捕获Google的Go屏幕,因为捕获屏幕依赖于底层操作系统的特定API。但Go的可以做到这一点。

例如https://github.com/vova616/screenshot

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

是的。这是一个两步的过程:

研究https://github.com/ShareX/ShareX/tree/master/ShareX.ScreenCaptureLib以查看要捕获屏幕/窗口的win32 API调用 将该逻辑转换为Go。您可以使用少数现有的win32 api Go绑定之一(例如https://github.com/AllenDang/w32)。如果他们缺少所需的功能,您可以添加更多包装器。

答案 6 :(得分:0)

该库似乎可以满足您的需求: https://godoc.org/github.com/kbinani/screenshot

  

将屏幕截图图像捕获为image.RGBA。支持Mac,Windows,Linux,FreeBSD,OpenBSD,NetBSD和Solaris。

func Capture(x, y, width, height int) (*image.RGBA, error)
func CaptureDisplay(displayIndex int) (*image.RGBA, error)
func CaptureRect(rect image.Rectangle) (*image.RGBA, error)
func GetDisplayBounds(displayIndex int) image.Rectangle
func NumActiveDisplays() int