1. 程式人生 > >Python圖片處理庫之PIL

Python圖片處理庫之PIL

                     

這個模組對於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模組的部分的函式,裡面還有很多東西值得去挖掘。但如果僅僅是簡單的一些操作,上面的也差不多夠了。