用Python來P圖

Python騷操做 | 用Python來P圖

給你們帶來一篇關於PIL的文章,PIL全稱是Python Image Library,顧名思義,是用來作圖像處理的。用這個庫,能夠實現不少PS裏的效果,好比像圖片模糊、尋找輪廓、邊緣檢測等等。咱們來看看具體怎麼作到的呢?​ python

PS做爲世界四大發明之一能夠說被廣大網友用到了極致,只有你想不到的沒有我P不了的,任何正經的圖片在均可以變成搞笑圖片(好比下圖)固然也能夠用ps作一點正經的事情。框架

img

做爲一個愛折騰的程序猿能用代碼的解決的事情絕對不會用其餘的方式,Python能夠打飛機,人工降雪,那麼p個圖對於Python來講是小兒科了,今天就教給你們Python之p圖大法。函數

具體介紹學習

今天P圖主要用到的就是PIL庫。
PIL(Python Image Library)是python的第三方圖像處理庫,可是因爲其強大的功能與衆多的使用人數,幾乎已經被認爲是python官方圖像處理庫了,今天只是簡單的學習了幾個方法就已經感覺到PIL的強大。
PIL能夠作不少和圖像處理相關的事情:
圖像歸檔(Image Archives)。PIL很是適合於圖像歸檔以及圖像的批處理任務。你能夠使用PIL建立縮略圖,轉換圖像格式,打印圖像等等。
圖像展現(Image Display)。PIL較新的版本支持包括TkPhotoImage,BitmapImage還有Windows DIB等接口。PIL支持衆多的GUI框架接口,能夠用於圖像展現。
圖像處理(Image Processing)。PIL包括了基礎的圖像處理函數,包括對點的處理,使用衆多的卷積核(convolution kernels)作過濾(filter),還有顏色空間的轉換。PIL庫一樣支持圖像的大小轉換,圖像旋轉,以及任意的仿射變換。PIL還有一些直方圖的方法,容許你展現圖像的一些統計特性。這個能夠用來實現圖像的自動對比度加強,還有全局的統計分析等。測試

今天先給你們介紹今天學到的三個比較好玩的操做,並無詳細的介紹PIL那些最經常使用的特性與用法,感興趣的小夥伴文末留言若是人數較多會考慮分享經常使用的特性。
主要參考自:
http://www.effbot.org/imaging...字體

代碼實現spa

先上一個效果圖。
精心準備了大量學習資料,加入千人交流羣:923414804獲取大量學習資料與入門教程。實現這個效果使用的是PIL中的Blend類code

Image.blend(image1,image2,alpha)教程

⇒image

使用給定的兩張圖像及透明度變量alpha,插值出一張新的圖像。這兩張圖像必須有同樣的尺寸和模式接口

合成公式爲:out=image1(1.0- alpha)+image2alpha

若變量alpha爲0.0,返回第一張圖像的拷貝。若變量alpha爲1.0,將返回第二張圖像的拷貝。對變量alpha的值無限制。

from PIL import Image
im1 = Image.open("124.jpg")
im2 = Image.open("123.jpg")
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.blend(im1, im2, 0.3)
im.save('k3.jpg')

固然除了上面的方法還能夠使用Composite類
Image.composite(image1,image2, mask) ⇒ image
複合類使用給定的兩張圖像及mask圖像做爲透明度,插值出一張新的圖像。變量mask圖像的模式能夠爲「1」,「L」或者「RGBA」。全部圖像必須有相同的尺寸

from PIL import Image
im1 = Image.open("124.jpg")
im2 = Image.open("123.jpg")
r,g,b = im1.split()            
print(b.mode)
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.composite(im1,im2,b)
im.save('k1.jpg')

本身只是作了一個簡單的測試你們能夠經過這種方法作出更好看的圖片,PIL不只能夠使兩張圖片進行重合,還能夠給圖片添加水印。

from PIL import Image, ImageDraw,ImageFont
#將原來的圖片轉換爲RGBA模式
im = Image.open(r"timg2.png").convert('RGBA')
#新建一個圖片,尺寸與上面的尺寸同樣,透明度爲0即徹底透明
txt=Image.new('RGBA', im.size, (0,0,0,0))
#設置要寫文字的字體
fnt=ImageFont.truetype("D:\PycharmProjects\music\SIMYOU.TTF", 30)
#打漢字
d=ImageDraw.Draw(txt)
#寫要打的位置,內容,用的字體,文字透明度
d.text((txt.size[0]-205,txt.size[1]-50),"@Ahab雜貨鋪",font=fnt, fill=(255,0,0,300))
#兩個圖片複合
out=Image.alpha_composite(im, txt)
#保存加水印後的圖片
out.save(r"KB.png")

img

下面帶來最後一組有趣的操做:

Filter類

im.filter(filter) ⇒ image

返回一個使用給定濾波器處理過的圖像的拷貝。在該模塊中,預先定義了不少加強濾波器,能夠經過filter()函數使用,預約義濾波器包括:

  • BLUR
  • CONTOUR
  • DETAIL
  • EDGE_ENHANCE
  • EDGE_ENHANCE_MORE
  • EMBOSS
  • FIND_EDGES
  • SMOOTH

其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入。

from PIL import Image
from PIL import ImageFilter                         ## 調取ImageFilter
img = Image.open("123.jpg")
blu = imgF.filter(ImageFilter.BLUR)                ##均值濾波
con = imgF.filter(ImageFilter.CONTOUR)             ##找輪廓
edge = imgF.filter(ImageFilter.FIND_EDGES)         ##邊緣檢測
blu.save('k.jpg')
con.save('k2.jpg')
edge.save('k3.jpg')

看一下效果第一張是原圖,剩下的是根據咱們設置的呈現的效果圖。

img

img

img

img

相關文章
相關標籤/搜索