2012-12-09 49 views
8

Có một cách đa nền tảng để chụp màn hình trong Google Go không? Hoặc bất kỳ cách nào cho vấn đề đó, nhưng nền tảng chéo sẽ được ưa thích hơn.Chụp màn hình trong Go?

+0

Trên stackoverflow.com, khi bạn nghĩ rằng một số câu trả lời là hữu ích hoặc giải quyết vấn đề của bạn, bạn nên upvote nó (nhấn tam giác lên) hoặc chấp nhận nó (nhấn thanh dưới tam giác xuống). – rputikar

Trả lời

0

Tôi không thể tìm thấy thư viện để thực hiện việc này. Chụp màn hình nền tảng ổn định đòi hỏi nhiều công việc. Việc chụp màn hình yêu cầu giao tiếp với trình quản lý hiển thị/máy chủ hoặc bộ đệm khung của hệ điều hành, điều này khác với nhiều hệ điều hành và bản phân phối Linux. Bạn sẽ phải viết các giao diện cho mỗi API OS (hoặc bọc các thư viện cung cấp chức năng), và sau đó trừu tượng tất cả các phương thức khác nhau trong một gói duy nhất để nó hoạt động trên nhiều nền tảng.

Cách khác để thực hiện việc này là chạy ứng dụng chụp màn hình hiện có (dòng lệnh) để thực hiện công việc chụp màn hình cho bạn, bao gồm lưu vào tệp. Sau đó đọc tệp trong ứng dụng của bạn. Để làm cho một ứng dụng Go chạy một ứng dụng của bên thứ ba, sử dụng gói os/exec, nó nằm trong thư viện chuẩn. Đối với Linux, bạn có thể sử dụng fbgrab để lưu bộ đệm khung thành tệp png.

5

Thật không may, không có thư viện nào để thực hiện việc này. Có một vài ràng buộc đối với magickwand (ngôn ngữ lập trình C và thư viện xử lý hình ảnh ImageMagick), xem http://go-lang.cat-v.org/library-bindings nhưng các tính năng này không đầy đủ và không có tính năng chụp màn hình.

Trong khi GeertJohan đề xuất, bạn có thể sử dụng os.exec để chạy chương trình bên ngoài và chụp màn hình (xem mã mẫu bên dưới). Ví dụ, bạn có thể sử dụng import lệnh từ ImageMagick để chụp màn hình (nên làm việc trên một nền tảng có thể chạy 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

Tôi không biết về bất kỳ thư viện cross-platform, nhưng bạn có thể làm điều này với xgbutil thư viện khi có máy chủ X. Bạn có thể thấy example of how to capture a screenshot here.

Nếu bạn muốn làm việc này trên hệ thống Mac/Windows, tôi có thể bắt đầu bằng cách kiểm tra nguồn cho go.wde, bao gồm các chương trình phụ trợ cho Windows và Mac. Tôi nghi ngờ bạn sẽ trực tiếp tìm thấy mã để chụp một ảnh chụp màn hình trong đó, nhưng nó có thể cung cấp cho bạn một số gợi ý hoặc một con đường để làm theo.

1

Không có nền tảng cách để chụp màn hình trong Google, vì màn hình chụp dựa trên API cụ thể của hệ điều hành cơ bản. Nhưng có thư viện cho Go để thực hiện việc này.

Ví dụ https://github.com/vova616/screenshot

0

Đó là. Đó là quy trình gồm 2 bước:

Nghiên cứu https://github.com/ShareX/ShareX/tree/master/ShareX.ScreenCaptureLib để xem cuộc gọi API win32 nào cần thực hiện để chụp màn hình/cửa sổ Dịch logic đó thành Go. Bạn có thể sử dụng một trong số ít các liên kết win32 api Go hiện có (ví dụ: https://github.com/AllenDang/w32). Nếu họ thiếu chức năng cần thiết, bạn có thể thêm trình bao bọc khác.

3

Bây giờ có:

https://github.com/vova616/screenshot

go get github.com/vova616/screenshot

Ví dụ:

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 
} 

Nếu bạn cần hỗ trợ hệ điều hành MacOS cũng như (đến khi yêu cầu kéo là bị sáp nhập), nhận được:

https://github.com/kesarion/screenshot

+0

Có một câu trả lời khác với vova616/ảnh chụp màn hình, nhưng nó không thực sự đa nền tảng vì thiếu sự hỗ trợ cho macOS. Gần đây, tôi đã triển khai giải pháp gốc và hy vọng nó sẽ sớm giúp các nhà phát triển! – Kesarion

Các vấn đề liên quan