2012-12-09 28 views
8

Google Goで画面をキャプチャするためのクロスプラットフォームの方法はありますか?それとも何らかの方法で、クロスプラットフォームが好ましいでしょう。Goで画面をキャプチャしますか?

+0

、あなたはそれ(プレスアップ三角形)をupvoteか(下の三角形の下のスティックプレス)それを受け入れる必要があります。 – rputikar

答えて

0

私はこれを行うためのライブラリを見つけることができません。安定したクロスプラットフォームのスクリーンキャプチャには多くの作業が必要です。スクリーンキャプチャには、オペレーティングシステムのディスプレイマネージャ/サーバまたはフレームバッファとのインタフェースが必要です。これは、多くのオペレーティングシステムやLinuxディストリビューションでは異なります。各OS API用のインタフェースを作成するか、機能を提供するライブラリをラップしてから、すべての異なるメソッドを単一のパッケージに抽象化して、クロスプラットフォームで動作させる必要があります。

これを行うもう1つの方法は、既存のスクリーンキャプチャアプリケーション(コマンドライン)を実行してファイルを保存するなど、スクリーンキャプチャの作業を行うことです。その後、あなたの行くアプリケーションでファイルを読んでください。 Goアプリケーションでサードパーティアプリケーションを実行するには、標準ライブラリにあるos/execパッケージを使用します。 Linuxの場合は、fbgrabを使用して、フレームバッファをpngファイルに保存することができます。

5

残念ながら、これを行うライブラリはありません。 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()) 
} 
1

私は、クロスプラットフォームのライブラリを知りませんが、あなたがこれを行うことができますXサーバが存在する場合はxgbutilライブラリ。 example of how to capture a screenshot hereが表示されます。

Mac/Windowsシステムでこれを動作させたい場合は、WindowsとMacのバックエンドを含むgo.wdeのソースを調べることから始めます。スクリーンショットをキャプチャするためのコードを直接見つけることはできませんが、いくつかのヒントやそれに従うべき道を与えるかもしれません。

1

キャプチャ画面は基本的なオペレーティングシステムの特定のAPIに依存しているため、クロスプラットフォームはありません方法 Google Goで画面をキャプチャします。しかし、これにはのライブラリがあります。

たとえば、https://github.com/vova616/screenshot

3

今そこにある:

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のサポートが必要な場合は、GET:

あなたには、いくつかの答えは便利ですか、あなたの問題を解決して考えるときstackoverflow.comに

+0

はvova616 /スクリーンショットで別の答えがあるのですが、それがためにMacOSのためのサポートの欠如の真のクロスプラットフォームされていません。私は最近、ネイティブのソリューションを実装し、それはすぐに多くの開発者を支援することを願っていました! – Kesarion

関連する問題