1. 程式人生 > >Python影象處理庫PIL的ImageGrab模組介紹

Python影象處理庫PIL的ImageGrab模組介紹

ImageGrab模組用於將當前螢幕的內容或者剪貼簿上的內容拷貝到PIL影象記憶體。

當前版本只支援windows系統。

一、ImageGrab模組的函式

1、  Grab

定義:ImageGrab.grab() image

  ImageGrab.grab(bbox) image

含義:(New in 1.1.3)抓取當前螢幕的快照,返回一個模式為“RGB”的影象。引數邊界框用於限制只拷貝當前螢幕的一部分割槽域。

例子:

>>> from PIL importImage, ImageGrab

>>> im =ImageGrab.grab()

>>> im.size

(1366, 768)

>>> im.mode

'RGB'

>>> im.show()

>>> im0 =ImageGrab.grab((300, 100, 1400, 600))

>>> im0.show()

>>> im0.size

(1100, 500)

>>> im0.mode

'RGB'

影象im是拷貝了整個螢幕的內容,其尺寸為1366x768,為我的顯示器當前解析度尺寸。影象im0拷貝了區域(300, 100, 1400, 600)1100x500大小的螢幕內容。

影象im如下:

                             

影象im0如下:

 

2、  Grabclipboard

定義:ImageGrab.grabclipboard() image or list of strings or None

含義:(New in 1.1.4)抓取當前剪貼簿的快照,返回一個模式為“RGB”的影象或者檔名稱的列表。如果剪貼簿不包括影象資料,這個函式返回空。

使用者可以使用函式isinstance()

來檢查該函式返回的是一個有效影象物件或者其他資料。

例子:

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."

通過實驗,發現在畫圖工具中開啟影象,選擇一部分然後剪貼,會返回一張模式為“RGB”的影象。如果在資料夾下剪貼影象檔案,則會返回“clipboard is empty.”,即這裡獲取的剪貼簿內容為空或者非影象內容。

本次測試的結果如下:

>>>================================ RESTART ================================

>>> 

Image: size : (566, 335),mode: RGB

>>> im.size

(566, 335)

>>> im.mode

'RGB'

>>> im.show()

影象im如下:

 

二、Python中的isinstance函式

isinstancePython中的一個內建函式

語法:

isinstance(object,classinfo)

如果引數objectclassinfo的例項,或者objectclassinfo類的子類的一個例項,返回True。如果object不是一個給定型別的物件,則返回結果總是False

如果classinfo不表示一個類(型別物件), 那麼它要麼是一個類的元組, 或者遞迴地包含這樣的(由資料型別構成的)元組.其他的序列型別是不被允許的。

如果classinfo不是一種資料型別或者由資料型別構成的元組,將引發一個TypeError異常。

例子:

>>>isinstance(100, int)

True

>>>isinstance(10.5, int)

False

>>>isinstance(10.5, float)

True

>>>isinstance(10.5, int)

False

>>>isinstance(10.5, (int,float))

True