欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Pillow(PIL)庫的用法詳解

 更新時間:2020年09月19日 15:33:36   作者:Python碎片  
這篇文章主要介紹了Python Pillow(PIL)庫的用法介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Pillow庫是一個Python的第三方庫。

在Python2中,PIL(Python Imaging Library)是一個非常好用的圖像處理庫,但PIL不支持Python3,所以有人(Alex Clark和Contributors)提供了Pillow,可以在Python3中使用。

官方文檔路徑:https://pillow.readthedocs.io/en/latest/

一、安裝Pillow

pip install pillow

Pillow庫安裝成功后,導包時要用PIL來導入,而不能用pillow或Pillow。

import PIL
from PIL import Image

在Pillow庫中,有二十多個模塊,還支持非常多的插件。其中最常用的是Image模塊中同名的Image類,其他很多模塊都是在Image模塊的基礎(chǔ)上對圖像做進一步的特殊處理。本文主要介紹Image模塊的常用用法,其他的模塊可以按需看文檔。

二、打開本地圖片

# coding=utf-8
from PIL import Image
 
image = Image.open("yazi.jpg")
image.show()

運行結(jié)果:

open(fp, mode='r'): 打開一張圖片,如果圖片與當前代碼在同一目錄下,可以只寫圖片的文件名,其他情況需要拼接圖片的路徑。mode默認為'r',也必須為'r'。

show(): 調(diào)用圖片顯示軟件打開圖片。打開后程序會阻塞,需要手動關(guān)閉。

三、創(chuàng)建一張新圖片

from PIL import Image
 
image = Image.new('RGB', (160, 90), (0, 0, 255))
image.show()

運行結(jié)果:

new(mode, size, color=0): 創(chuàng)建一張圖片(畫布),用于繪圖,有3個參數(shù)。

mode, 圖片的模式,如“RGB”(red,green,blue三原色的縮寫,表示真彩色圖像)、“L”(灰度,黑白圖像)等。

size, 圖片的大小。是一個長度為2的元組(width, height),表示的是像素大小。

color, 圖片的顏色,默認值為0表示黑色??梢詡魅腴L度為3的元組表示顏色,也可以傳入顏色的十六進制,在版本1.1.4后,還可以直接傳入顏色的英文單詞,如上面代碼中的(0, 0, 255)可以換成‘#0000FF'或‘blue',都是表示藍色。

四、Image模塊的常用屬性

from PIL import Image
 
image = Image.open("yazi.jpg")
print('width: ', image.width)
print('height: ', image.height)
print('size: ', image.size)
print('mode: ', image.mode)
print('format: ', image.format)
print('category: ', image.category)
print('readonly: ', image.readonly)
print('info: ', image.info)

運行結(jié)果:

width:  1557

height:  911

size:  (1557, 911)

mode:  RGBA

format:  jpg

category:  0

readonly:  1

width屬性表示圖片的像素寬度,height屬性表示圖片的像素高度,width和height組成了size屬性,size是一個元組。

mode屬性表示圖片的模式,如RGBA,RGB,P,L等。

format屬性表示圖片的格式,格式一般與圖片的后綴擴展名相關(guān)。category屬性表示圖片的的類別。

readonly屬性表述圖片是否為只讀,值為1或0,表示的是布爾值。

info屬性表示圖片的信息,是一個字典。

五、圖片的模式和模式轉(zhuǎn)換

1. 圖片的模式

圖片有很多模式,支持以下標準模式,參考:https://pillow.readthedocs.io/en/latest/handbook/concepts.html#concept-modes

mode 描述
1 1位像素,黑白,每字節(jié)存儲一個像素
L 8位像素,黑白
8位像素,使用調(diào)色板映射到任何其他模式
RGB  3x8位像素,真彩色
RGBA  4x8位像素,帶透明蒙版的真彩色
CMYK  4x8位像素,分色
YCbCr  3x8位像素,彩色視頻格式
LAB  3x8位像素,L * a * b顏色空間
HSV  3x8位像素,色相,飽和度,值顏色空間
32位有符號整數(shù)像素
32位浮點像素

1位像素的范圍是0-1,0表示黑1表示白,中間表示灰。8位像素的范圍是0-255,如RGB的(0, 0, 0)表示黑,(255, 255, 255)表示白,依此類推。

2. 圖片的模式轉(zhuǎn)換

from PIL import Image
 
image = Image.open("yazi.jpg")
print(image.mode)
image1 = image.convert('1')
print(image1.mode)
# image1.show()
image_l = image.convert('L')
print(image_l.mode)
# image_l.show()
image_p = image.convert('P')
print(image_p.mode)
image_p.show()

運行結(jié)果:

RGBA

1

L

convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256): 將當前圖片轉(zhuǎn)換為指定的模式,并且返回轉(zhuǎn)換后的圖片。如果不指定模式,則選擇一種能保留圖片所有信息且不使用調(diào)色板的模式(通常的結(jié)果是不轉(zhuǎn)換)。將彩色圖像轉(zhuǎn)換為灰度('L')時,使用ITU-R 601-2進行亮度轉(zhuǎn)換:L = R * 299/1000 + G * 587/1000 + B * 114/1000 。將灰度('L')或真彩('RGB')轉(zhuǎn)換為模式'1'時,如果dither參數(shù)為'NONE',所有大于128的值均設(shè)置為255(白色),所有其他值都設(shè)為0(黑色)。

convert()方法有5個參數(shù),都有默認值,根據(jù)轉(zhuǎn)換的模式來傳值:

mode,圖片的模式,傳入需要轉(zhuǎn)換的模式。部分模式之間不支持轉(zhuǎn)換,代碼會報錯。

matrix, 轉(zhuǎn)換矩陣。傳入該參數(shù)時,應該傳入由浮點數(shù)構(gòu)成的元組,元組長度為4或12。matrix只支持從少數(shù)模式轉(zhuǎn)換成'L'或'RGB'。

dither, 高頻振動,用于控制顏色抖動。從模式'RGB'轉(zhuǎn)換為'P'或從'RGB'或'L'轉(zhuǎn)換為'1'時使用??捎玫姆椒ㄓ?NONE'或'FLOYDSTEINBERG'(默認)。當提供了matrix參數(shù)時不使用此功能。

palette, 調(diào)色板,用于控制調(diào)色板的產(chǎn)生。從模式'RGB'轉(zhuǎn)換為'P'時使用,可用的方法有'WEB'(默認)或'ADAPTIVE'。'ADAPTIVE'表示使用自適應的調(diào)色板。

colors, 自適應調(diào)色板使用的顏色數(shù)。當palette參數(shù)為'ADAPTIVE'時,用于控制調(diào)色板的顏色數(shù)目。默認是最大值,即256種顏色。

2.1 matrix參數(shù)的效果對比

from PIL import Image

image = Image.open("yazi.jpg")
image_rgb = image.convert('RGB')
print(image_rgb.mode)
image_l = image_rgb.convert('L')
image_l.show()
matrix = (0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6)
image_l2 = image_rgb.convert('L', matrix=matrix)
image_l2.show()

運行結(jié)果:

上面的代碼中,給matrix參數(shù)傳入了一個長度為12的元組,matrix的值改變了轉(zhuǎn)換的效果,變化程度取決于傳入的元組中浮點數(shù)的值。注意,有些模式是不支持的,如'RGBA',且傳入的元組長度必須為4或12,否則報錯。

2.2 palette參數(shù)的效果對比

from PIL import Image
 
image = Image.open("yazi.jpg")
image_p = image.convert('P')
# image_l.show()
image_p2 = image.convert('P', palette='ADAPTIVE', colors=256)
image_p2.show()

運行結(jié)果:

上面的代碼中,將palette參數(shù)改為了'ADAPTIVE',圖片的差異不大,不過,如果將colors變小差異會比較大,但那樣會將圖片效果變差。

六、圖片拷貝粘貼和保存

from PIL import Image
 
 
image = Image.open("yazi.jpg")
image_copy = image.copy()
# image_copy.show()
image_new = Image.new('RGB', (160, 90), (0, 0, 255))
image_new2 = Image.new('L', (160, 90), '#646464')
image_copy.paste(image_new, (100, 100, 260, 190), mask=image_new2)
image_copy.save('duck.jpg')
image_save = Image.open('duck.jpg')
print(image_save.format, image_save.mode)
image_copy.show()

運行結(jié)果:

jpg RGBA

copy(): 拷貝當前的圖片,拷貝出來的圖片與原圖一模一樣。如果想在圖片上粘貼一些內(nèi)容,又想保留原圖時,可以使用此方法。

paste(im, box=None, mask=None): 將另一張圖片粘貼到當前圖片中,如果粘貼的模式不匹配,則將被粘貼圖片的模式轉(zhuǎn)換成當前圖片的模式。有3個參數(shù)。

im, 被粘貼的圖片。傳入一張圖片,當?shù)诙€參數(shù)box指定的是一個區(qū)域時,im參數(shù)也可以是一個整數(shù)或顏色值(元組表示,16進制表示和顏色名都可以,如上面代碼中的image_new可以換成(0, 0, 255), '#0000FF', 'blue')。

box, 圖片粘貼的位置或區(qū)域。傳入一個長度為2或4的元組,如果不傳值,默認為(0, 0),圖片被粘貼在當前圖片的左上角。如果傳入長度為2的元組(x, y),表示被粘貼圖片的左上角坐標位置。如果傳入長度為4的元組(x1, y1, x2, y2),表示圖片粘貼的區(qū)域,此時區(qū)域的大小必須與被粘貼圖片一致,否則會報錯,傳入的元組長度為其他值也會報錯。

mask, 蒙版。傳入一張與被粘貼圖片尺寸一樣的圖片,可以使用模式為'1'、'L'或者'RGBA'的圖像。如果mask圖像的顏色值為255,則直接按被粘貼圖片的顏色粘貼,如果mask圖像的顏色值為0,則保留當前圖片的顏色(相當于沒有粘貼),如果mask圖像的顏色值為0~255之間的值,則將im與mask進行混合后再粘貼。

save(fp, format=None, **params): 將當前圖片按指定的文件名保存,運行后會將圖片按新名字保存在當前路徑下(也可以指定路徑)。文件名最好帶擴展名,方便打開,format表示圖片的格式,沒有指定format則會根據(jù)擴展名來解析(如果能解析出來),一般不需要指定format,傳入一個規(guī)范的文件名即可。

七、圖片的裁剪和縮放

from PIL import Image
 
image = Image.open("yazi.jpg")
image_crop = image.crop(box=(300, 300, 800, 700))
# image_crop.show()
print('before resize: ', image.size)
image_resize = image.resize((500, 400), resample=Image.LANCZOS, box=(100, 100, 1200, 800), reducing_gap=5.0)
print('after resize: ', image_resize.size)
image_resize.show()

運行結(jié)果:

before resize:  (1557, 911)


crop(box=None): 裁剪圖片,返回裁剪區(qū)域的圖片。box表示裁剪的區(qū)域,傳入長度為4的元組(x1, y1, x2, y2),不傳默認為拷貝原圖,相當于copy()方法,如果裁剪的區(qū)域超過了原圖的區(qū)域,超出部分用像素格填充。

resize(size, resample=BICUBIC, box=None, reducing_gap=None): 縮放圖片,返回縮放后的圖片。有4個參數(shù)。

size, 圖片縮放后的尺寸,傳入一個長度為2的元組(width, height)。

resample, 重采樣,是一個可選的重采樣過濾器。可以傳入Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS。默認過濾器為Image.BICUBIC。如果圖像的模式為'1'或'P',則始終設(shè)置為Image.NEAREST。

box, 縮放圖片的區(qū)域。傳入長度為4的元組(x1, y1, x2, y2),這個區(qū)域必須在原圖的(0, 0, width, height)范圍內(nèi),如果超出范圍會報錯,如果不傳值則默認將整張原圖進行縮放。

reducing_gap, 減少間隙。傳入一個浮點數(shù),用于優(yōu)化圖片縮放效果,默認不進行優(yōu)化,值大于3.0時優(yōu)化效果基本已經(jīng)是公平的重采樣。

到此這篇關(guān)于Python Pillow(PIL)庫的用法介紹的文章就介紹到這了,更多相關(guān)Python Pillow(PIL)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)的井字棋(Tic Tac Toe)游戲示例

    Python實現(xiàn)的井字棋(Tic Tac Toe)游戲示例

    這篇文章主要介紹了Python實現(xiàn)的井字棋(Tic Tac Toe)游戲,結(jié)合實例形式分析了井字棋的原理及Python相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • Python程序流程控制實驗

    Python程序流程控制實驗

    這篇文章主要介紹了Python程序流程控制實驗,程序流程控制的使用在Python中具有非常重要的地位。在本文中我將布置Python程序流程控制的實驗習題,希望您閱讀完本文后能夠有所收獲
    2022-01-01
  • 淺談python 線程池threadpool之實現(xiàn)

    淺談python 線程池threadpool之實現(xiàn)

    這篇文章主要介紹了淺談python 線程池threadpool之實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • python-docx文檔格式修改方式

    python-docx文檔格式修改方式

    使用python-docx庫修改docx文檔格式的兩種方法:第一種是通過自定義函數(shù)設(shè)置段落和字體樣式,第二種是預設(shè)Word中的樣式后通過代碼替換文檔整體樣式。這兩種方式各有優(yōu)缺點,第一種方法更靈活,而第二種方法可以更全面地保留格式細節(jié)
    2024-09-09
  • PyQt實現(xiàn)異步數(shù)據(jù)庫請求的實戰(zhàn)記錄

    PyQt實現(xiàn)異步數(shù)據(jù)庫請求的實戰(zhàn)記錄

    開發(fā)軟件的時候不可避免要和數(shù)據(jù)庫發(fā)生交互,但是有些 SQL 請求非常耗時,如果在主線程中發(fā)送請求,可能會造成界面卡頓,本文將介紹一種讓數(shù)據(jù)庫請求變得和前端的 ajax 請求一樣簡單,希望對大家有所幫助
    2023-12-12
  • python文字和unicode/ascll相互轉(zhuǎn)換函數(shù)及簡單加密解密實現(xiàn)代碼

    python文字和unicode/ascll相互轉(zhuǎn)換函數(shù)及簡單加密解密實現(xiàn)代碼

    這篇文章主要介紹了python文字和unicode/ascll相互轉(zhuǎn)換函數(shù)及簡單加密解密實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python smtplib模塊自動收發(fā)郵件功能(一)

    python smtplib模塊自動收發(fā)郵件功能(一)

    這篇文章主要為大家詳細介紹了python smtplib模塊自動收發(fā)郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 解讀sqlalchemy的常用數(shù)據(jù)類型有哪些

    解讀sqlalchemy的常用數(shù)據(jù)類型有哪些

    這篇文章主要介紹了解讀sqlalchemy的常用數(shù)據(jù)類型有哪些,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python數(shù)據(jù)序列化技術(shù)總結(jié)

    Python數(shù)據(jù)序列化技術(shù)總結(jié)

    在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)序列化是一個關(guān)鍵環(huán)節(jié),它允許我們將復雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可存儲或可傳輸?shù)母袷?,Python提供了多種數(shù)據(jù)序列化技術(shù),每種技術(shù)都有其獨特的性能優(yōu)勢和適用場景,本文將詳細介紹幾種強大的Python數(shù)據(jù)序列化技術(shù),需要的朋友可以參考下
    2025-03-03
  • python對配置文件.ini進行增刪改查操作的方法示例

    python對配置文件.ini進行增刪改查操作的方法示例

    .ini配置文件常被用作存儲程序中的一些參數(shù),通過它程序可以變得更加靈活。下面這篇文章主要給大家介紹了關(guān)于python對配置文件.ini進行增刪改查操作的方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論