golang截图
golang截图
官网:https://pkg.go.dev/github.com/kbinani/screenshot@v0.0.0-20210720154843-7d3a670d8329#readme-example
常用函数
screenshot.Capture() 截取矩形截图
screenshot.CaptureRect() 截取矩形截图,用于获取分辨率后调用该函数
screenshot.NumActiveDisplays() 获取外接显示器
screenshot.GetDisplayBounds() 获取显示器的分辨率
screenshot.CaptureDisplay() 全屏截取某个显示器
底层都是调用screenshot.Capture(),看看源代码就一清二楚了
举个例子
全屏截取所有外接显示器
自定义矩形截取
package main
import (
   "fmt"
   "github.com/kbinani/screenshot"
   "image"
   "image/png"
   "os"
)
func savePng(filename string, img image.Image) error {
   file, err := os.Create(filename)
   if err != nil {
      fmt.Println(fmt.Sprintf("创建文件失败, filename:%s err:%s", filename, err))
      return err
   }
   defer func(file *os.File) {
      err := file.Close()
      if err != nil {
         fmt.Println(fmt.Sprintf("关闭文件失败, filename:%s err:%s", filename, err))
      }
   }(file)
   err = png.Encode(file, img)
   if err != nil {
      fmt.Println(fmt.Sprintf("编码PNG失败, filename:%s err:%s", filename, err))
      return err
   }
   return nil
}
func screenshotAllDisplay() {
   //截取所有显示器
   n := screenshot.NumActiveDisplays() //获取显示器的数量
   fmt.Println(fmt.Sprintf("共有%d个显示器", n))
   for i := 0; i < n; i++ {
      bounds := screenshot.GetDisplayBounds(i) //获取显示器的分辨率
      fmt.Println(fmt.Sprintf("第%d个显示器的分辨率是:%v", i+1, bounds))
      img, err := screenshot.CaptureRect(bounds) //截取整个屏幕
      if err != nil {
         panic(err)
      }
      fileName := fmt.Sprintf("%d_%dx%d.png", i, bounds.Dx(), bounds.Dy())
      err = savePng(fileName, img)
      if err != nil {
         panic(err)
      }
      fmt.Println(fmt.Sprintf("第%d个显示器截图, 保存到:%s", i+1, fileName))
   }
}
func capture(x, y, width, height int) {
   img, err := screenshot.Capture(x, y, width, height)
   if err != nil {
      return
   }
   fileName := fmt.Sprintf("test.png")
   err = savePng(fileName, img)
   if err != nil {
      panic(err)
   }
}
func main() {
   screenshotAllDisplay()
   capture(10, 10, 500, 500)
}
参考:https://blog.csdn.net/yang731227/article/details/108176980
                    
                
                
            
        
浙公网安备 33010602011771号