在Python中使用PIL模塊處理圖像的教程
PIL:Python Imaging Library,已經(jīng)是Python平臺(tái)事實(shí)上的圖像處理標(biāo)準(zhǔn)庫(kù)了。PIL功能非常強(qiáng)大,但API卻非常簡(jiǎn)單易用。
安裝PIL
在Debian/Ubuntu Linux下直接通過(guò)apt安裝:
$ sudo apt-get install python-imaging
Mac和其他版本的Linux可以直接使用easy_install或pip安裝,安裝前需要把編譯環(huán)境裝好:
$ sudo easy_install PIL
如果安裝失敗,根據(jù)提示先把缺失的包(比如openjpeg)裝上。
Windows平臺(tái)就去PIL官方網(wǎng)站下載exe安裝包。
操作圖像
來(lái)看看最常見(jiàn)的圖像縮放操作,只需三四行代碼:
import Image
# 打開(kāi)一個(gè)jpg圖像文件,注意路徑要改成你自己的:
im = Image.open('/Users/michael/test.jpg')
# 獲得圖像尺寸:
w, h = im.size
# 縮放到50%:
im.thumbnail((w//2, h//2))
# 把縮放后的圖像用jpeg格式保存:
im.save('/Users/michael/thumbnail.jpg', 'jpeg')
其他功能如切片、旋轉(zhuǎn)、濾鏡、輸出文字、調(diào)色板等一應(yīng)俱全。
比如,模糊效果也只需幾行代碼:
import Image, ImageFilter
im = Image.open('/Users/michael/test.jpg')
im2 = im.filter(ImageFilter.BLUR)
im2.save('/Users/michael/blur.jpg', 'jpeg')
效果如下:

PIL的ImageDraw提供了一系列繪圖方法,讓我們可以直接繪圖。比如要生成字母驗(yàn)證碼圖片:
import Image, ImageDraw, ImageFont, ImageFilter
import random
# 隨機(jī)字母:
def rndChar():
return chr(random.randint(65, 90))
# 隨機(jī)顏色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 隨機(jī)顏色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 創(chuàng)建Font對(duì)象:
font = ImageFont.truetype('Arial.ttf', 36)
# 創(chuàng)建Draw對(duì)象:
draw = ImageDraw.Draw(image)
# 填充每個(gè)像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 輸出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg');
我們用隨機(jī)顏色填充背景,再畫(huà)上文字,最后對(duì)圖像進(jìn)行模糊,得到驗(yàn)證碼圖片如下:

如果運(yùn)行的時(shí)候報(bào)錯(cuò):
IOError: cannot open resource
這是因?yàn)镻IL無(wú)法定位到字體文件的位置,可以根據(jù)操作系統(tǒng)提供絕對(duì)路徑,比如:
要詳細(xì)了解PIL的強(qiáng)大功能,請(qǐng)請(qǐng)參考PIL官方文檔:
http://effbot.org/imagingbook/
- Python圖像處理庫(kù)PIL詳細(xì)使用說(shuō)明
- python使用pil進(jìn)行圖像處理(等比例壓縮、裁剪)實(shí)例代碼
- Python圖像處理庫(kù)PIL的ImageDraw模塊介紹詳解
- Python圖像處理庫(kù)PIL的ImageFont模塊使用介紹
- Python編程中使用Pillow來(lái)處理圖像的基礎(chǔ)教程
- Python Pillow.Image 圖像保存和參數(shù)選擇方式
- Python用Pillow(PIL)進(jìn)行簡(jiǎn)單的圖像操作方法
- Python圖像處理庫(kù)PIL的ImageGrab模塊介紹詳解
- Python圖像處理PIL各模塊詳細(xì)介紹(推薦)
- 使用PIL(Python-Imaging)反轉(zhuǎn)圖像的顏色方法
- Python PIL讀取的圖像發(fā)生自動(dòng)旋轉(zhuǎn)的實(shí)現(xiàn)方法
- Python圖像處理庫(kù)PIL的ImageEnhance模塊使用介紹
- 詳解python opencv、scikit-image和PIL圖像處理庫(kù)比較
- python PIL Image 圖像處理基本操作實(shí)例
相關(guān)文章
OpenCV實(shí)戰(zhàn)案例之車(chē)道線識(shí)別詳解
計(jì)算機(jī)視覺(jué)在自動(dòng)化系統(tǒng)觀測(cè)環(huán)境、預(yù)測(cè)該系統(tǒng)控制器輸入值等方面起著至關(guān)重要的作用,下面這篇文章主要給大家介紹了關(guān)于OpenCV實(shí)戰(zhàn)案例之車(chē)道線識(shí)別的相關(guān)資料,需要的朋友可以參考下2022-10-10
Pytorch模型定義與深度學(xué)習(xí)自查手冊(cè)
這篇文章主要為大家介紹了Pytorch模型定義與深度學(xué)習(xí)的自查手冊(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Pytorch mask_select 函數(shù)的用法詳解
今天小編就為大家分享一篇Pytorch mask_select 函數(shù)的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
基于Python+Pygame實(shí)現(xiàn)變異狗大戰(zhàn)游戲
只有你想不到,沒(méi)有我找不到寫(xiě)不了的好游戲!這篇文章就來(lái)和大家分享一下如何基于Python+Pygame實(shí)現(xiàn)變異狗大戰(zhàn)游戲,感興趣的可以了解一下2023-03-03
python中使用ctypes調(diào)用so傳參設(shè)置遇到的問(wèn)題及解決方法
這篇文章主要介紹了python中使用ctypes調(diào)用so傳參設(shè)置,本文較詳細(xì)的給大家介紹了遇到問(wèn)題及解決方案,需要的朋友可以參考下2019-06-06
Python利用PyQt5制作一個(gè)獲取網(wǎng)絡(luò)實(shí)時(shí)NBA數(shù)據(jù)并播報(bào)的GUI程序
現(xiàn)在NBA聯(lián)賽也進(jìn)行到半決賽了,我們?cè)趺礃硬拍芤愿斓姆椒ǐ@取NBA的數(shù)據(jù)呢?這里我們就自己來(lái)做一個(gè)數(shù)據(jù)播報(bào)的程序,需要的朋友可以參考下2021-06-06
詳解Python如何使用Netmiko進(jìn)行文件傳輸
Netmiko是一個(gè)用于連接和管理各種網(wǎng)絡(luò)設(shè)備的Python庫(kù),它是Paramiko的一個(gè)擴(kuò)展。本文就來(lái)講講如何利用Netmiko實(shí)現(xiàn)文件傳輸功能吧2023-05-05
Pycharm學(xué)習(xí)教程(2) 代碼風(fēng)格
這篇文章主要為大家詳細(xì)介紹了最全的Pycharm學(xué)習(xí)教程第二篇代碼風(fēng)格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

