如何在Python中从剪贴板复制图像?

时间:2016-02-07 14:25:43

标签: python python-imaging-library ctypes

def Clip(self):
    subprocess.call('SnippingTool.exe')
    #ctypes.windll.user32.OpenClipboard(0)
    #ClippedScreen=ctypes.windll.user32.GetClipboardData
    #ClippedScreen=PIL.ImageGrab.grab(bbox=(10,10,500,500))
    ClippedScreen = PIL.ImageGrab.grabclipboard()
    self.savescreenshot(ClippedScreen)
  1. ImageGrab.grabclipboard()raise IOError("Unsupported BMP bitfields layout")而失败。在网上读到这是一个已知问题。不知道如何解决这个问题。

  2. 接下来尝试了ctypes,即失败的AttributeError: '_FuncPtr'对象没有属性'save'

  3. bbox正在运行,但我不知道如何使裁剪区动态化。

  4. 全屏抓取工作正常

    def Prntscrn(self):
                WholeScreen=ImageGrab.grab()
                self.savescreenshot(WholeScreen)
    

    任何帮助都会很棒,我的想法是使用剪切工具剪辑屏幕,然后将图像从剪贴板复制到变量,并使用savescreenshot方法将其保存在文件夹中。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:1)

我所知道的唯一方法是使用gtk。实施例

window = gtk.screen_get_default().get_root_window()
coordinates = (0, 0) + window.get_size() # (0, 0) is the x and y positions, get_size() is the width and height of the window.
pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, *coordinates[2:]) # size of the image
colormap = window.get_colormap()
pix.get_from_drawable(window, colormap, coordinates[0], coordinates[1], 0, 0) # The last four numbers are where in the window we are getting this image and where in the pixbuf we are storing it.  We want the window to be drawn at 0, 0 always, but we want to get the image from wherever we want.  That is decided when we define coordinates.
clipboard = gtk.Clipboard()
clipboard.set_image(pix)

有关pygtk的有用信息,请参阅developer.gnome.org

答案 1 :(得分:1)

用于ImageGrab保存剪贴板

如何!

python == 2.7 pillow == 2.7.0

上运行
from PIL import ImageGrab, Image
im= ImageGrab.grabclipboard()
if isinstance(im, Image.Image):
    im.save('tmp.jpg')

为什么?

  

IOError:不支持的BMP位域布局

     
    

可与Pilllow 2.8.0,2.8.1,2.8.2一起重现。 Pillow 2.6.0,2.7.0 不可重复     https://github.com/python-pillow/Pillow/issues/1293

  

注意

  

很遗憾地注意到仅适用于Windows

答案 2 :(得分:0)

确定。我终于找到了解决这个问题的方法。从版本2.8.0开始,Pillow中存在问题

AS per this link. Also as mentioned here the last version in which this worked was 2.7.0

因为问题在于BmpImagePlugin.py文件,我所做的是从here下载Pillow-2.7.0.tar.gz(md5)并替换我D中的BmpImagePlugin.py: \ Python \ Lib \ site-packages \ PIL与下载文件中找到的一个。一切都很完美。

我尝试使用cmd提示符安装2.7.0,但不断收到一些bat文件丢失错误(与Visual Studio相关的问题)。