Существует ли кросс-платформенный способ захвата экрана в Google Go? Или любой вариант, но перекрестная платформа будет предпочтительнее.
Захват экрана в Go?
Ответ 1
Сейчас есть:
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 (до объединения запроса на получение), получите:
Ответ 2
К сожалению, для этого нет библиотеки. Существует несколько привязок для 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())
}
Ответ 3
Я не знаю никакой кросс-платформенной библиотеки, но вы можете сделать это с помощью библиотеки xgbutil, когда X-сервер настоящее время. Вы можете увидеть пример того, как сделать снимок экрана здесь.
Если вы хотите, чтобы это работало в системах Mac/Windows, я, вероятно, начинал бы с изучения источника go.wde, который включает в себя серверы для Windows и Mac. Я сомневаюсь, что вы сразу найдете код для захвата скриншота, но он может дать вам некоторые подсказки или путь к следующему.
Ответ 4
Существует не межплатформенный способ, чтобы захватить экран в Google Go, потому что захват экрана зависит от конкретного API базовых операционных систем. Но для Go существуют библиотеки, которые делают это.
Ответ 5
Я не могу найти библиотеку, чтобы сделать это. Стабильный кросс-платформенный захват экрана требует большой работы. Для захвата экрана требуется взаимодействие с диспетчером отображения/сервером операционных систем или фрейм-буфером, который отличается для многих операционных систем и дистрибутивов Linux. Вам придется писать интерфейсы для каждого OS API (или обертывать библиотеки, которые предоставляют функциональность), а затем абстрагировать все разные методы в одном пакете, чтобы он работал кросс-платформенным.
Другим способом сделать это будет запуск существующего приложения для захвата экрана (командной строки) для выполнения работы по захвату экрана, включая сохранение в файл. Затем прочитайте файл в своем приложении. Чтобы приложение Go запускало стороннее приложение, используйте пакет os/exec, он находится в стандартной библиотеке. Для Linux вы можете использовать fbgrab для сохранения фреймового буфера в файл png.
Ответ 6
Это. Это двухэтапный процесс:
Изучите https://github.com/ShareX/ShareX/tree/master/ShareX.ScreenCaptureLib, чтобы узнать, какие вызовы API win32 необходимо сделать для захвата экрана/окна Переведите эту логику, чтобы идти. Вы можете использовать один из немногих существующих привязок Go для win32 api Go (например, https://github.com/AllenDang/w32). Если у них отсутствует необходимая функциональность, вы можете добавить больше оберток.
Ответ 7
Эта библиотека, кажется, отвечает вашим потребностям: https://godoc.org/github.com/kbinani/screenshot
captures screen-shot image as image.RGBA. Mac, Windows, Linux, FreeBSD, OpenBSD, NetBSD, и Solaris are supported.
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