python PIL 圖像處理

Image模塊

Image模塊是在Python PIL圖像處理中常見的模塊內。如open、save、conver、show...等功能
open(filename,mode)(打開一張圖像)。python

from PIL import Image
im = Image.open("./static/gikki.jpg")
im.show()

在win的環境下im.show的方式爲win自帶的圖像顯示應用。打開並確認給定的圖像文件。這個是一個懶操做;該函數只會讀文件頭,而真實圖像數據直到嘗試處理該數據纔會從文件讀取(調用Load()方法將強行加載圖像數據)。若是變量Mode被設置,那必須是"r"。用戶可使用一個字符串(表示文件名稱的字符串)或者文件對象做爲變量file的值。文件對象必須實現read(),seek()和tell()方法,而且以二進制模式打開。函數

Save類

from PIL import Image
im = image.open("./static/gikki.jpg")
print(im)
# 保存爲png
im.save("./static/gikki.png")
print(im.format,im.size,im.mode)

Form類

from PIL import Image
im = image.open("./static/gikki.jpg")
print(im.format) # 打印出格式信息
im.show()

Mode類

modes 描述
1 1位像素,黑色和白色,存成8位的像素
L 8位像素,黑白
P 8位像素,使用調色板映射到任何其餘模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,顏色隔離
YCbCr 3×8位像素,彩色視頻格式
I 32位整型像素
F 32位浮點像素
from PIL import Image
im = image.open("./static/gikki.jpg")
print(im.mode) ## 打印出模式信息
im.show()
e^{i\pi} + 1 = 0

convert類

將當前圖像轉換爲其餘模式,而且返回新的圖像。當從一個調色板圖像轉換時,這個方法經過這個調色板來轉換像素。若是不對變量mode賦值,該方法將會選擇一種模式,在沒有調色板的狀況下,使得圖像和調色板中的全部信息均可以被表示出來。當從一個顏色圖像轉換爲黑白圖像時,PIL庫使用ITU-R601-2 luma轉換公式:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
當轉換爲2位圖像(模式「1」)時,源圖像首先被轉換爲黑白圖像。結果數據中大於127的值被設置爲白色,其餘的設置爲黑色;這樣圖像會出現抖動。若是要使用其餘閾值,更改閾值127,可使用方法point()。爲了去掉圖像抖動現象,可使用dither選項code

from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
new_im.show()

size類

圖像的尺寸,按照像素數計算,它的返回值爲寬度和高度的二元組(width, height)。orm

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size) ## 打印出尺寸信息
im.show()

Thumbnail類

對圖像長寬進行操做視頻

from PIL import Image
im = Image.open("E:\mywife.jpg")
w, h = im.size
print('Original image size: %sx%s' % (w, h))
im.thumbnail((w//2, h//2))
im.save('thumbnail.jpg', 'jpeg')

Palette類

顏色調色板表格。若是圖像的模式是「P」,則返回ImagePalette類的實例;不然,將爲None。
以下爲對非「P」模式下的圖像進行palette信息顯示。對象

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.palette)

New類

使用給定的變量mode和size生成新的圖像。Size是給定的寬/高二元組,這是按照像素數來計算的。對於單通道圖像,變量color只給定一個值;對於多通道圖像,變量color給定一個元組(每一個通道對應一個值)。在版本1.1.4及其以後,用戶也能夠用顏色的名稱,好比給變量color賦值爲「red」。若是沒有對變量color賦值,圖像內容將會被所有賦值爲0(爲黑色)。若是變量color是空,圖像將不會被初始化,即圖像的內容全爲0。這對向該圖像複製或繪製某些內容是有用的。圖片

以下爲將圖像設置爲128x128大小的紅色圖像。字符串

from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128), "#FF0000")
n_im.show()

Copy

拷貝這個圖像。若是用戶想粘貼一些數據到這張圖,可使用這個方法,可是原始圖像不會受到影響。it

from PIL import Image
im = Image.open("E:\mywife.jpg")
im_copy = im.copy()

Crop類

從當前的圖像中返回一個矩形區域的拷貝。變量box是一個四元組,定義了左、上、右和下的像素座標。用來表示在原始圖像中截取的位置座標,如box(100,100,200,200)就表示在原始圖像中以左上角爲座標原點,截取一個100*100(像素爲單位)的圖像,爲方便理解,以下爲示意圖box(b1,a1,b2,a2)。做圖軟件爲Visio2016。這是一個懶操做。對源圖像的改變可能或者可能不體如今裁減下來的圖像中。爲了獲取一個分離的拷貝,對裁剪的拷貝調用方法load()。io

from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)              ##肯定拷貝區域大小
region = im.crop(box)                   ##將im表示的圖片對象拷貝到region中,大小爲box
region.show()

Paste類

將一張圖粘貼到另外一張圖像上。變量box或者是一個給定左上角的2元組,或者是定義了左,上,右和下像素座標的4元組,或者爲空(與(0,0)同樣)。若是給定4元組,被粘貼的圖像的尺寸必須與區域尺寸同樣。若是模式不匹配,被粘貼的圖像將被轉換爲當前圖像的模式。

from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[0,0,100,100]
im_crop = im.crop(box)
print(im_crop.size,im_crop.mode)
im.paste(im_crop, (100,100))             ##(100,100,0,0)
im.paste(im_crop, (400,400,500,500))
im.show()

Draft

配置圖像文件加載器,使得返回一個與給定的模式和尺寸儘量匹配的圖像的版本。

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()

Rotate類

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

from PIL import Image
im = Image.open("E:\mywife.jpg")
im_45 = im.rotate(45)
im_30 = im.rotate(30, Image.NEAREST,1)
print(im_45.size,im_30.size)
im_45.show()
im_30.show()
相關文章
相關標籤/搜索