<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
PIL:Python Imaging Library,已經是Python平臺事實上的影象處理標準庫了。PIL功能非常強大,但API卻非常簡單易用。
由於PIL僅支援到Python 2.7,加上年久失修,於是一群志願者在PIL的基礎上建立了相容的版本,名字叫Pillow,支援最新Python 3.x,又加入了許多新特性,因此,我們可以直接安裝使用Pillow。
安裝Pillow
如果安裝了Anaconda,Pillow就已經可用了。否則,需要在命令列下通過pip安裝:
$ pip install pillow
如果遇到Permission denied安裝失敗,請加上sudo重試。
操作影象
來看看最常見的影象縮放操作,只需三四行程式碼:
from PIL import Image # 開啟一個jpg影象檔案,注意是當前路徑: im = Image.open('test.jpg') # 獲得影象尺寸: w, h = im.size print('Original image size: %sx%s' % (w, h)) # 縮放到50%: im.thumbnail((w//2, h//2)) print('Resize image to: %sx%s' % (w//2, h//2)) # 把縮放後的影象用jpeg格式儲存: im.save('thumbnail.jpg', 'jpeg')
其他功能如切片、旋轉、濾鏡、輸出文字、調色盤等一應俱全。
比如,模糊效果也只需幾行程式碼:
from PIL import Image, ImageFilter # 開啟一個jpg影象檔案,注意是當前路徑: im = Image.open('test.jpg') # 應用模糊濾鏡: im2 = im.filter(ImageFilter.BLUR) im2.save('blur.jpg', 'jpeg')
效果如下:
PIL的ImageDraw提供了一系列繪圖方法,讓我們可以直接繪圖。比如要生成字母驗證碼圖片:
from PIL import Image, ImageDraw, ImageFont, ImageFilter import random # 隨機字母: def rndChar(): return chr(random.randint(65, 90)) # 隨機顏色1: def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) # 隨機顏色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)) # 建立Font物件: font = ImageFont.truetype('Arial.ttf', 36) # 建立Draw物件: draw = ImageDraw.Draw(image) # 填充每個畫素: 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')
我們用隨機顏色填充背景,再畫上文字,最後對影象進行模糊,得到驗證碼圖片如下:
如果執行的時候報錯:
IOError: cannot open resource
這是因為PIL無法定位到字型檔案的位置,可以根據作業系統提供絕對路徑,比如:
'/Library/Fonts/Arial.ttf'
要詳細瞭解PIL的強大功能,請請參考Pillow官方檔案:
Pillow (PIL Fork) 9.2.0 documentation
總結:
PIL提供了操作影象的強大功能,可以通過簡單的程式碼完成複雜的影象處理。
在1966年,Seymour Papert和Wally Feurzig發明了一種專門給兒童學習程式設計的語言——LOGO語言,它的特色就是通過程式設計指揮一個小海龜(turtle)在螢幕上繪圖。
海龜繪圖(Turtle Graphics)後來被移植到各種高階語言中,Python內建了turtle庫,基本上100%複製了原始的Turtle Graphics的所有功能。
我們來看一個指揮小海龜繪製一個長方形的簡單程式碼:
# 匯入turtle包的所有內容: from turtle import * # 設定筆刷寬度: width(4) # 前進: forward(200) # 右轉90度: right(90) # 筆刷顏色: pencolor('red') forward(100) right(90) pencolor('green') forward(200) right(90) pencolor('blue') forward(100) right(90) # 呼叫done()使得視窗等待被關閉,否則將立刻關閉視窗: done()
在命令列執行上述程式碼,會自動彈出一個繪圖視窗,然後繪製出一個長方形:
從程式程式碼可以看出,海龜繪圖就是指揮海龜前進、轉向,海龜移動的軌跡就是繪製的線條。要繪製一個長方形,只需要讓海龜前進、右轉90度,反覆4次。
呼叫width()函數可以設定筆刷寬度,呼叫pencolor()函數可以設定顏色。更多操作請參考turtle庫的說明。
繪圖完成後,記得呼叫done()函數,讓視窗進入訊息迴圈,等待被關閉。否則,由於Python程序會立刻結束,將導致視窗被立刻關閉。
turtle包本身只是一個繪相簿,但是配合Python程式碼,就可以繪製各種複雜的圖形。例如,通過迴圈繪製5個五角星:
from turtle import * def drawStar(x, y): pu() goto(x, y) pd() # set heading: 0 seth(0) for i in range(5): fd(40) rt(144) for x in range(0, 250, 50): drawStar(x, 0) done()
程式執行效果如下:
使用遞迴,可以繪製出非常複雜的圖形。例如,下面的程式碼可以繪製一棵分型樹:
from turtle import * # 設定色彩模式是RGB: colormode(255) lt(90) lv = 14 l = 120 s = 45 width(lv) # 初始化RGB顏色: r = 0 g = 0 b = 0 pencolor(r, g, b) penup() bk(l) pendown() fd(l) def draw_tree(l, level): global r, g, b # save the current pen width w = width() # narrow the pen width width(w * 3.0 / 4.0) # set color: r = r + 1 g = g + 2 b = b + 3 pencolor(r % 200, g % 200, b % 200) l = 3.0 / 4.0 * l lt(s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) rt(2 * s) fd(l) if level < lv: draw_tree(l, level + 1) bk(l) lt(s) # restore the previous pen width width(w) speed("fastest") draw_tree(l, 4) done()
執行上述程式需要花費一定的時間,最後的效果如下:
以上就是Python+Pillow進行圖形處理的範例詳解的詳細內容,更多關於Python Pillow圖形處理的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45