【Python】PIL模塊

 

Python自建庫,在爬蟲等基礎應用中更加簡單好記,做整理以備自查。

Image模塊

from PIL import Image

open類

 

Save類

im.save(outfile, format, options…)

format類

im.format ⇒ string or None

返回圖片格式,如果圖像不是從文件讀取它的值就是None。

Mode類

im.mode ⇒ string

返回圖像的模式,常見的mode 有

  1. “L” (luminance) 表示灰度圖像
  2. “RGB”表示真彩色圖像,
  3. “CMYK” 表示出版圖像,表明圖像所使用像素格式。

convert類

im.convert(“P”,**options) ⇒ image

可供選擇的選項爲:

  • Dither=. 控制顏色抖動。默認是FLOYDSTEINBERG,與鄰近的像素一起承擔錯誤。不使能該功能,則賦值爲NONE。
  • Palette=. 控制調色板的產生。默認是WEB,這是標準的216色的“web palette”。要使用優化的調色板,則賦值爲ADAPTIVE。
  • Colors=. 當選項palette爲ADAPTIVE時,控制用於調色板的顏色數目。默認是最大值,即256種顏色

當前圖像轉換爲其他模式,並且返回新的圖像。實際上一種矩陣變換,可以自己定義,不常用

Size類

im.size ⇒ (width, height)
輸出:(750,500) 

輸出元組,爬蟲中很重要

Info類

im.info ⇒ dictionary

存儲圖像相關數據的字典。文件句柄使用該字典傳遞從文件中讀取的各種非圖像信息。不直觀,不常用

new類

創建空白畫布,類似plt;少數幾個非對象函數

Image.new(mode, size,color) ⇒ image
  • Mode:同上,常見三種
  • Size:是給定的寬/高二元組,這是按照像素數來計算的。
  • color:對於單通道圖像,變量color只給定一個值;對於多通道圖像,變量color給定一個元組(每個通道對應一個值)。

註釋:顏色兩種表示

  1. "red"
  2. "#FF0000"

Copy類

im.copy() ⇒ image

 open時加個.copy,不影響原圖

Crop類

m.crop(box) ⇒ image

截圖。衆所周知,左上的座標-右下的座標,故變量box是一個四元int元組

Paste類

im.paste(image,box)

簡稱PS。變量box或者是一個給定左上角的2元組,或者是定義了左,上,右和下像素座標的4元組,或者爲空(與(0,0)一樣)

注:如果模式不匹配,被粘貼的圖像將被轉換爲當前圖像的模式。
 

Filter類

opencv在filter等基礎圖像處理中更有優勢,相關處理不推薦PIL

im.filter(filter) ⇒ image

返回一個使用給定濾波器處理過的圖像的拷貝。具體參考圖像濾波在ImageFilter 模塊的應用,在該模塊中,預先定義了很多增強濾波器,可以通過filter( )函數使用,預定義濾波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入。

Blend類

Image.blend(image1,image2, alpha) ⇒ image

透明度,不重要

Split類

im.split() ⇒ sequence

和圖片Mode有關,RGB可以spilt三個,L模式不能spilt

from PIL import Image
im = Image.open("E:\mywife.jpg")
r,g,b = im.split()

Composite類

Image.composite(image1,image2, mask) ⇒ image

融合,沒用

Eval類

Image.eval(image,function) ⇒ image

使用變量function對應的函數(該函數應該有一個參數)處理變量image所代表圖像中的每一個像素點。如果變量image所代表圖像有多個通道,那變量function對應的函數作用於每一個通道。注意:變量function對每個像素只處理一次,所以不能使用隨機組件和其他生成器。

from PIL import Image
im = Image.open("E:\mywife.jpg")
def fun01(x):
    return x*0.3
def fun02(y):
    return y*2.0
im1_eval = Image.eval(im, fun01)
im2_eval = Image.eval(im, fun02)
im1_eval.show()
im2_eval.show()

Merge類

Image.merge(mode,bands) ⇒ image

Draft類

im.draft(mode,size)

Getbands類

im.getbands()⇒ tuple of strings

Getbbox類

im.getbbox() ⇒ 4-tuple or None

Getdata類

im.getdata() ⇒ sequence

Getextrema類

im.getextrema() ⇒ 2-tuple

Getpixel類

im.getpixel(xy) ⇒ value or tuple

Histogram類

im.histogram()⇒ list

返回一個圖像的直方圖。這個直方圖是關於像素數量的list,圖像中的每個象素值對應一個成員。如果圖像有多個通道,所有通道的直方圖會連接起來(例如,“RGB”圖像的直方圖有768個值)。二值圖像(模式爲“1”)當作灰度圖像(模式爲“L”)處理。

Load類

im.load()

爲圖像分配內存並從文件中加載它(或者從源圖像,對於懶操作)。正常情況下,用戶不需要調用這個方法,因爲在第一次訪問圖像時,Image類會自動地加載打開的圖像。在1.1.6及以後的版本,方法load()返回一個用於讀取和修改像素的像素訪問對象。這個訪問對象像一個二維隊列,如:

pix = im.load() 
print pix[x, y] 
pix[x, y] =value

通過這個對象訪問比方法getpixel()和putpixel()快很多。

 

Paste類

im.paste(image,box, mask)

使用變量mask對應的模板圖像來填充所對應的區域。可以使用模式爲“1”、“L”或者“RGBA”的圖像作爲模板圖像。模板圖像的尺寸必須與變量image對應的圖像尺寸一致。如果變量mask對應圖像的值爲255,則模板圖像的值直接被拷貝過來;如果變量mask對應圖像的值爲0,則保持當前圖像的原始值。變量mask對應圖像的其他值,將對兩張圖像的值進行透明融合,如果變量image對應的爲“RGBA”圖像,即粘貼的圖像模式爲“RGBA”,則alpha通道被忽略。用戶可以使用同樣的圖像作爲原圖像和模板圖像。


Putdata類

im.putdata(data) 
im.putdata(data, scale, offset)

從sequence對象中拷貝數據到當前圖像,從圖像的左上角(0,0)位置開始。變量scale和offset用來調整sequence中的值:

pixel = value*scale + offset

如果變量scale忽略,則默認爲1.0。如果變量offset忽略,則默認爲0.0。

Resize類

im.resize(size) ⇒ image 
im.resize(size, filter) ⇒ image

返回改變尺寸的圖像的拷貝。變量size是所要求的尺寸,是一個二元組:(width, height)。變量filter爲NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式爲“1”或者“P”,該變量設置爲NEAREST。在當前的版本中bilinear和bicubic濾波器不能很好地適應大比例的下采樣(例如生成縮略圖)。用戶需要使用ANTIALIAS,除非速度比質量更重要。

Rotate類

im.rotate(angle) ⇒ image 
im.rotate(angle,filter=NEAREST, expand=0) ⇒ image

返回一個按照給定角度順時鐘圍繞圖像中心旋轉後的圖像拷貝。變量filter是NEAREST、BILINEAR或者BICUBIC之一。如果省略該變量,或者圖像模式爲“1”或者“P”,則默認爲NEAREST。變量expand,如果爲true,表示輸出圖像足夠大,可以裝載旋轉後的圖像。如果爲false或者缺省,則輸出圖像與輸入圖像尺寸一樣大。


Seek類

im.seek(frame)

在給定的文件序列中查找指定的幀。如果查找超越了序列的末尾,則產生一個EOFError異常。當文件序列被打開時,PIL庫自動指定到第0幀上。

Tell類


im.tell() ⇒ integer

返回當前幀所處位置,從0開始計算。


Thumbnail類

im.thumbnail(size) 
im.thumbnail(size, filter)

修改當前圖像,使其包含一個自身的縮略圖,該縮略圖尺寸不大於給定的尺寸。這個方法會計算一個合適的縮略圖尺寸,使其符合當前圖像的寬高比,調用方法draft()配置文件讀取器,最後改變圖像的尺寸。變量filter應該是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略該變量,則默認爲NEAREST。注意:在當前PIL的版本中,濾波器bilinear和bicubic不能很好地適應縮略圖產生。用戶應該使用ANTIALIAS,圖像質量最好。如果處理速度比圖像質量更重要,可以選用其他濾波器。這個方法在原圖上進行修改。如果用戶不想修改原圖,可以使用方法copy()拷貝一個圖像。這個方法返回空。
Transform類

im.transform(size,method, data) ⇒ image 
im.transform(size, method, data, filter) ⇒ image

使用給定的尺寸生成一張新的圖像,與原圖有相同的模式,使用給定的轉換方式將原圖數據拷貝到新的圖像中。在當前的PIL版本中,參數method爲EXTENT(裁剪出一個矩形區域),AFFINE(仿射變換),QUAD(將正方形轉換爲矩形),MESH(一個操作映射多個正方形)或者PERSPECTIVE。變量filter定義了對原始圖像中像素的濾波器。在當前的版本中,變量filter爲NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式爲“1”或者“P”,該變量設置爲NEAREST。

im.transform(size,EXTENT, data) ⇒ image 
im.transform(size, EXTENT, data, filter) ⇒ image

從圖像中裁剪一個區域。變量data爲指定輸入圖像中兩個座標點的4元組(x0,y0,x1,y1)。輸出圖像爲這兩個座標點之間像素的採樣結果。例如,如果輸入圖像的(x0,y0)爲輸出圖像的(0,0)點,(x1,y1)則與變量size一樣。這個方法可以用於在當前圖像中裁剪,放大,縮小或者鏡像一個任意的長方形。它比方法crop()稍慢,但是與resize操作一樣快。

im.transform(size, AFFINE, data) ⇒ image 
im.transform(size, AFFINE,data, filter) ⇒ image

對當前的圖像進行仿射變換,變換結果體現在給定尺寸的新圖像中。變量data是一個6元組(a,b,c,d,e,f),包含一個仿射變換矩陣的第一個兩行。輸出圖像中的每一個像素(x,y),新值由輸入圖像的位置(ax+by+c, dx+ey+f)的像素產生,使用最接近的像素進行近似。這個方法用於原始圖像的縮放、轉換、旋轉和裁剪。

im.transform(size,QUAD, data) ⇒ image 
im.transform(size, QUAD, data, filter) ⇒ image

輸入圖像的一個四邊形(通過四個角定義的區域)映射到給定尺寸的長方形。變量data是一個8元組(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四邊形的左上,左下,右下和右上四個角。

im.transform(size,PERSPECTIVE, data) ⇒ image 
im.transform(size, PERSPECTIVE, data, filter) ⇒ image

對當前圖像進行透視變換,產生給定尺寸的新圖像。變量data是一個8元組(a,b,c,d,e,f,g,h),包括一個透視變換的係數。對於輸出圖像中的每個像素點,新的值來自於輸入圖像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,使用最接近的像素進行近似。這個方法用於原始圖像的2D透視。
 
wocao!!!gakki不見了!!!

Transpose類

im.transpose(method)⇒ image

返回當前圖像的翻轉或者旋轉的拷貝。變量method的取值爲:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或ROTATE_270。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章