首页 > 其他分享 >golang截图

golang截图

时间:2022-10-01 14:45:58浏览次数:73  
标签:截图 err screenshot nil fmt filename golang Sprintf

golang截图

官网:https://pkg.go.dev/github.com/kbinani/[email protected]#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

标签:截图,err,screenshot,nil,fmt,filename,golang,Sprintf
From: https://www.cnblogs.com/rainbow-tan/p/16747182.html

相关文章

  • Golang 常用的开源库和学习资源有哪些
    书籍golang-bookgobyexamplego-language英文,入门很不错的Go语言设计与实现Go语言标准库网络框架gin轻量级库,自定义性高beego国产库,比gin重一些,有自己的or......
  • centos7下载golang的解决连不上dl.google.com
    下载golang[root@192soft]#wgethttps://golang.google.cn/dl/go1.17.8.linux-amd64.tar.gz--2022-09-3023:50:54--https://golang.google.cn/dl/go1.17.8.linux-am......
  • Chromedp简单使用,实现截图和打印pdf
    goChromedp简介Chromedp简单使用,实现截图和打印pdf使用gogetgithub.com/wms3001/goChromedp实例截图goChr:=&GoChromedp{}goChr.Url="https://www.oschina.net"goChr.......
  • 用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)
    用IO多路复用实现nginx静态资源代理(C/Java/Golang)效果展示代理HTML代理图片注意,静态资源代理基于HTTP,可以了解上一篇文章:几十行代码使用TCP简单实现HTT......
  • golang轻量级的代码复制粘贴检查器 cpd
    golang轻量级的代码复制粘贴检查器cpd项目地址:https://github.com/dengjiawen8955/copy-paste-detector快速开始clonegitclonehttps://github.com/dengjiawen895......
  • Golang map 的底层原理
    前言本文介绍golang中map的实现方式,希望对读者和我有所帮助结构map是go语言中的基础的数据结构,在寻找指定key时,复杂度是O(1),在某些场景能发挥很大的作用......
  • Golang 的锁
    前言go语言的锁,一说大家都知道,一个是互斥锁Mutex,一个是读写互斥锁RWMutex,用起来很简单,但是要想在技术上更进一步,还是需要了解其原理基础知识进程同步既然......
  • Golang 常问知识点(简略)
    前言稍微记录一下问题点吧,文章会不断的优化更新有些比较大的知识点,比如锁原理啥的,会单独拎出来写一篇,这里只是大概Go语言的基础数据类型占用大小类型大小......
  • 抽象工厂模式 Golang
    参考链接练习:设计一个电脑主板架构,电脑包括(显卡,内存,CPU)3个固定的插口,显卡具有显示功能(display,功能实现只要打印出意义即可),内存具有存储功能(storage),cpu具有计算功能(calcul......
  • python使用win32api进行后台窗口的部分截图函数
    defwindow_capture_beat(hwnd,stayx:int,endx:int,stay:int,endy:int):hwndDC=win32gui.GetWindowDC(hwnd)mfcDC=win32ui.CreateDCFromHandle(hwndDC)......