Python圖片處理庫之PIL
阿新 • • 發佈:2018-12-20
這個模組對於Python2.7 的windows64位電腦而言,還真的是不好找啊。這裡分享一個下載連結吧,需要的朋友可以下載下來。PIL For Windows64 Python2.7下面分享一下這個庫的簡單的使用。
安裝
上面的這個超連結是一個exe檔案,點選安裝的時候,會自動的探測你電腦上Python的安裝位置,所以很方便。就不再過多的敘述了。
很多的小例子
這裡是一些常用的相關的函式的使用,記得在你的程式碼的目錄下面放一張圖片,不然會報錯的。
第一個小例子Firsttest.py
# coding:utf-8import Image"""format: 識別影象的源格式,如果不是從檔案中讀取的,則被設定為None值size: 返回的一個元組,有兩個元素,其值為畫素意義上的寬和高mode: RGB,此外還有L(Luminance),CTMK(pre-press image,呵呵我也不知道這是個神馬)""" image = Image.open('hu.jpg')print image.format, image.size, image.mode# 用於將圖片 使用本地的圖片檢視器開啟image.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
手動製作一張圖片
# coding:utf-8import Imageimage = Image.new("RGBA",(640,480),(123,213,123))image.save('CreatedByPython.jpg','jpeg')
- 1
- 2
- 3
- 4
- 5
開啟,儲存操作
# coding:utf-8import Image"""crop: 從原圖層上剪下下來一個給定的矩形大小,此函式接收一個四元素的元組作為其引數,分別代表左上右下,原點為左上角paste: 貼上的含義,將剪下到的影象貼上到某一個位置merge: 合併,影象的合併操作""" image = Image.open('hu.jpg')box = (100, 100, 300, 300)mycrop = image.crop(box)# # mycrop.show()# mycrop.save('hu_crop.jpg')## # 旋轉180° 的影象顯示# # mycrop.transpose(Image.ROTATE_180).show()## # 將剪下板上的影象貼上到某張圖片上,貼上的位置根據box而定# image.paste(mycrop, box)# image.show()mycrop.rotate(Image.ROTATE_180)image.paste(mycrop,box)image.save('pasted.jpg' ,'jpeg')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
對圖片上的每個畫素點進行操作
# coding:utf-8import Image""" image.point(function) 這個function接收一個引數,且對影象的每一個點都會進行這個函式的變換"""image = Image.open('hu.jpg')image = image.point(lambda i : i * 1.5)image.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
旋轉圖片
# coding:utf-8import Imageimage = Image.open("hu.jpg")# 下面的幾行程式碼可以較好的呈現出圖片的變化情況image.rotate(45).show()image.rotate(90).show()image.rotate(180).show()image.rotate(270).show()image.rotate(360).show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
縮放圖片
# coding:utf-8import Imageimport glob, ossize = 128, 128image = Image.open('hu.jpg')# 呼叫thumbnail方法完成對圖片的處理image.thumbnail(size, Image.ANTIALIAS)image.save("hu_scale.jpg")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
圖層通道操作
#coding:utf-8import Image""" r,g,b=im.split()#分割成三個通道,此時r,g,b分別為三個影象物件。 im=Image.merge("RGB",(b,g,r))#將b,r兩個通道進行翻轉。"""image = Image.open('hu.jpg')r,g,b = image.split()r.save('Split/r.jpg','jpeg')g.save('Split/g.jpg','jpeg')b.save('Split/b.jpg','jpeg')image = Image.merge("RGB",(b,g,r))image.save('Split/mergedByBGR.jpg','jpeg')image = Image.merge("RGB",(g,r,b))image.save('Split/mergedByGRB.jpg','jpeg')image = Image.merge("RGB",(r,g,b))image.save('Split/mergedByRGB.jpg','jpeg')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
轉換操作
# coding:utf-8import Imageimage = Image.open('hu.jpg')# 格外應該注意這裡 接受一個元組引數image.resize((200, 200))# 鏈式的呼叫可以顯示改變的效果,換行了貌似就不行了。:-)image.rotate(45) # 旋轉45°image.transpose(Image.FLIP_LEFT_RIGHT).show() # 左右對換image.transpose(Image.FLIP_TOP_BOTTOM).show() # 上下對換image.transpose(Image.ROTATE_90).show() # 旋轉90°
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
超多特效(濾鏡效果)
# coding:utf-8import Image, ImageFilter"""色彩空間的變換,convert函式可以用來將影象轉換為不同的色彩模式"""image = Image.open('hu.jpg')# image.filter(ImageFilter.DETAIL).show() # 真實效果展現# image.filter(ImageFilter.BLUR).show() # 以模糊化的效果展現# image.filter(ImageFilter.CONTOUR).show() # 以鉛筆畫的效果展現# image.filter(ImageFilter.FIND_EDGES).show() # 以鉛筆畫黑色背景展示# image.filter(ImageFilter.EDGE_ENHANCE).show() # 線條高亮的顯示效果# image.filter(ImageFilter.EDGE_ENHANCE_MORE).show() # 強化線條高亮# image.filter(ImageFilter.EMBOSS).show() # 浮雕效果# image.filter(ImageFilter.GaussianBlur).show() # 也是模糊化的顯示效果# image.filter(ImageFilter.SMOOTH_MORE).show()# image.filter(ImageFilter.GaussianBlur).save('Filter/GaussianBlur.jpg','jpeg')image.transpose(Image.FLIP_LEFT_RIGHT).save('left_to_right.jpg','jpeg')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
總結
上面羅列出的僅僅是PIL庫中的Image模組的部分的函式,裡面還有很多東西值得去挖掘。但如果僅僅是簡單的一些操作,上面的也差不多夠了。