鱼C论坛

 找回密码
 立即注册
查看: 1861|回复: 6

python如何获取windows剪切板中的截图

[复制链接]
发表于 2022-5-8 06:41:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在使用截图以后,系统会将截图加入到剪切板中,python如何获取剪切板中的截图了?
目前发现可以使用
win32clipboard.GetClipboardData(win32con.CF_BITMAP)# 估计是获取截图内存地址
win32clipboard.GetClipboardData(win32con.DIB) # 应该是截图的内容,但是与本地存储的二进制图片数据不一致。
求助具体获得的方式
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-8 07:40:47 From FishC Mobile | 显示全部楼层
from PIL import Image, ImageGrab

im = ImageGrab.grabclipboard()

if isinstance(im, Image.Image):
    print "Image: size : %s, mode: %s" % (im.size, im.mode)
    im.save("D:\\Document\\mdoc\\python\\pic\\12\\grab_grabclipboard.jpg")
elif im:
    for filename in im:
        try:
            print "filename: %s" % filename
            im = Image.open(filename)
        except IOError:
            pass #ignore this file
        else:
            print "ImageList: size : %s, mode: %s" % (im.size, im.mode)
else:
    print "clipboard is empty."
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-8 07:41:41 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-5-8 07:40
from PIL import Image, ImageGrab

im = ImageGrab.grabclipboard()

网上搜的,不知道能不能用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-8 13:01:11 | 显示全部楼层
没有现成的api将位图信息保存为文件,要保存为文件还是比较麻烦的,你还是直接用现成的库吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-8 18:36:53 | 显示全部楼层
wp231957 发表于 2022-5-8 07:41
网上搜的,不知道能不能用

谢谢,可以用的,我后面我也搜到这个了,还有一种方法用win32API也可以就是要加结构体和头文件过程特别麻烦。测试过也可以用。代码如下:
  1. import ctypes
  2. from ctypes.wintypes import *
  3. import win32clipboard
  4. from win32con import *
  5. import sys
  6. class BITMAPFILEHEADER(ctypes.Structure):
  7.     _pack_ = 1  # structure field byte alignment
  8.     _fields_ = [
  9.         ('bfType', WORD),  # file type ("BM")
  10.         ('bfSize', DWORD),  # file size in bytes
  11.         ('bfReserved1', WORD),  # must be zero
  12.         ('bfReserved2', WORD),  # must be zero
  13.         ('bfOffBits', DWORD),  # byte offset to the pixel array
  14.     ]
  15. SIZEOF_BITMAPFILEHEADER = ctypes.sizeof(BITMAPFILEHEADER)
  16. class BITMAPINFOHEADER(ctypes.Structure):
  17.     _pack_ = 1  # structure field byte alignment
  18.     _fields_ = [
  19.         ('biSize', DWORD),
  20.         ('biWidth', LONG),
  21.         ('biHeight', LONG),
  22.         ('biPLanes', WORD),
  23.         ('biBitCount', WORD),
  24.         ('biCompression', DWORD),
  25.         ('biSizeImage', DWORD),
  26.         ('biXPelsPerMeter', LONG),
  27.         ('biYPelsPerMeter', LONG),
  28.         ('biClrUsed', DWORD),
  29.         ('biClrImportant', DWORD)
  30.     ]
  31. SIZEOF_BITMAPINFOHEADER = ctypes.sizeof(BITMAPINFOHEADER)
  32. win32clipboard.OpenClipboard()
  33. try:
  34.     if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB):
  35.         data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)
  36.     else:
  37.         print('clipboard does not contain an image in DIB format')
  38.         sys.exit(1)
  39. finally:
  40.     win32clipboard.CloseClipboard()
  41. bmih = BITMAPINFOHEADER()
  42. ctypes.memmove(ctypes.pointer(bmih), data, SIZEOF_BITMAPINFOHEADER)
  43. if bmih.biCompression != BI_BITFIELDS:  # RGBA?
  44.     print('insupported compression type {}'.format(bmih.biCompression))
  45.     sys.exit(1)
  46. bmfh = BITMAPFILEHEADER()
  47. ctypes.memset(ctypes.pointer(bmfh), 0, SIZEOF_BITMAPFILEHEADER)  # zero structure
  48. bmfh.bfType = ord('B') | (ord('M') << 8)
  49. bmfh.bfSize = SIZEOF_BITMAPFILEHEADER + len(data)  # file size
  50. SIZEOF_COLORTABLE = 0
  51. bmfh.bfOffBits = SIZEOF_BITMAPFILEHEADER + SIZEOF_BITMAPINFOHEADER + SIZEOF_COLORTABLE
  52. bmp_filename = 'clipboard.bmp'
  53. with open(bmp_filename, 'wb') as bmp_file:
  54.     bmp_file.write(bmfh)
  55.     bmp_file.write(data)
  56. print('file "{}" created from clipboard image'.format(bmp_filename))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-8 18:37:47 | 显示全部楼层
wp231957 发表于 2022-5-8 07:40
from PIL import Image, ImageGrab

im = ImageGrab.grabclipboard()

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-8 18:38:18 | 显示全部楼层
hrpzcf 发表于 2022-5-8 13:01
没有现成的api将位图信息保存为文件,要保存为文件还是比较麻烦的,你还是直接用现成的库吧。

楼上的两位的可以使用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表