給大家?guī)?lái)一篇關(guān)于PIL的文章,PIL全稱(chēng)是Python Image Library,顧名思義,是用來(lái)做圖像處理的。用這個(gè)庫(kù),可以實(shí)現(xiàn)很多PS里的效果,比如像圖片模糊、尋找輪廓、邊緣檢測(cè)等等。我們來(lái)看看具體怎么做到的呢??

PS作為世界四大發(fā)明之一可以說(shuō)被廣大網(wǎng)友用到了極致,只有你想不到的沒(méi)有我P不了的,任何正經(jīng)的圖片在都可以變成搞笑圖片(比如下圖)當(dāng)然也可以用ps做一點(diǎn)正經(jīng)的事情。

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第1張圖片

作為一個(gè)愛(ài)折騰的程序猿能用代碼的解決的事情絕對(duì)不會(huì)用其他的方式,Python可以打飛機(jī),人工降雪,那么p個(gè)圖對(duì)于Python來(lái)說(shuō)是小兒科了,今天就教給大家Python之p圖大法。

如果你依然在編程的世界里迷茫,可以加入我們的Python學(xué)習(xí)扣qun:784758214,看看前輩們是如何學(xué)習(xí)的。交流經(jīng)驗(yàn)。從基礎(chǔ)的python腳本到web開(kāi)發(fā)、爬蟲(chóng)、django、數(shù)據(jù)挖掘等,零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)的資料都有整理。送給每一位python的小伙伴!分享一些學(xué)習(xí)的方法和需要注意的小細(xì)節(jié),點(diǎn)擊加入我們的 python學(xué)習(xí)者聚集地
具體介紹

今天P圖主要用到的就是PIL庫(kù)。

PIL(Python Image Library)是python的第三方圖像處理庫(kù),但是由于其強(qiáng)大的功能與眾多的使用人數(shù),幾乎已經(jīng)被認(rèn)為是python官方圖像處理庫(kù)了,今天只是簡(jiǎn)單的學(xué)習(xí)了幾個(gè)方法就已經(jīng)感受到PIL的強(qiáng)大。

PIL可以做很多和圖像處理相關(guān)的事情:

圖像歸檔(Image Archives)。PIL非常適合于圖像歸檔以及圖像的批處理任務(wù)。你可以使用PIL創(chuàng)建縮略圖,轉(zhuǎn)換圖像格式,打印圖像等等。

圖像展示(Image Display)。PIL較新的版本支持包括TkPhotoImage,BitmapImage還有Windows DIB等接口。PIL支持眾多的GUI框架接口,可以用于圖像展示。

圖像處理(Image Processing)。PIL包括了基礎(chǔ)的圖像處理函數(shù),包括對(duì)點(diǎn)的處理,使用眾多的卷積核(convolution kernels)做過(guò)濾(filter),還有顏色空間的轉(zhuǎn)換。PIL庫(kù)同樣支持圖像的大小轉(zhuǎn)換,圖像旋轉(zhuǎn),以及任意的仿射變換。PIL還有一些直方圖的方法,允許你展示圖像的一些統(tǒng)計(jì)特性。這個(gè)可以用來(lái)實(shí)現(xiàn)圖像的自動(dòng)對(duì)比度增強(qiáng),還有全局的統(tǒng)計(jì)分析等。

今天先給大家介紹今天學(xué)到的三個(gè)比較好玩的操作,并沒(méi)有詳細(xì)的介紹PIL那些最常用的特性與用法,感興趣的小伙伴文末留言如果人數(shù)較多會(huì)考慮分享常用的特性。

代碼實(shí)現(xiàn)

先上一個(gè)效果圖。

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第2張圖片

實(shí)現(xiàn)這個(gè)效果使用的是PIL中的Blend類(lèi)

            
              Image.blend(image1,image2,alpha)
?image
            
          

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

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

若變量alpha為0.0,返回第一張圖像的拷貝。若變量alpha為1.0,將返回第二張圖像的拷貝。對(duì)變量alpha的值無(wú)限制。

            
              在學(xué)習(xí)過(guò)程中有什么不懂得可以加我的
python學(xué)習(xí)交流扣扣qun,784758214
群里有不錯(cuò)的學(xué)習(xí)視頻教程、開(kāi)發(fā)工具與電子書(shū)籍。
與你分享python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)好python,和學(xué)習(xí)什么內(nèi)容
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')
            
          

當(dāng)然除了上面的方法還可以使用Composite類(lèi)

            
              Image.composite(image1,image2, mask) ? image
            
          

復(fù)合類(lèi)使用給定的兩張圖像及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')
            
          

自己只是做了一個(gè)簡(jiǎn)單的測(cè)試大家可以通過(guò)這種方法做出更好看的圖片,PIL不僅可以使兩張圖片進(jìn)行重合,還可以給圖片添加水印。

            
              from PIL import Image, ImageDraw,ImageFont
            
          

將原來(lái)的圖片轉(zhuǎn)換為RGBA模式

            
              im = Image.open(r"timg2.png").convert('RGBA')
            
          

新建一個(gè)圖片,尺寸與上面的尺寸一樣,透明度為0即完全透明

            
              txt=Image.new('RGBA', im.size, (0,0,0,0))
            
          

設(shè)置要寫(xiě)文字的字體

            
              fnt=ImageFont.truetype("D:\PycharmProjects\music\SIMYOU.TTF", 30)
            
          

打漢字

            
              d=ImageDraw.Draw(txt)
            
          

寫(xiě)要打的位置,內(nèi)容,用的字體,文字透明度

            
              d.text((txt.size[0]-205,txt.size[1]-50),"@Ahab雜貨鋪",font=fnt, fill=(255,0,0,300))
            
          

兩個(gè)圖片復(fù)合

            
              out=Image.alpha_composite(im, txt)
            
          

保存加水印后的圖片

            
              out.save(r"KB.png")
            
          

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第3張圖片

下面帶來(lái)最后一組有趣的操作:

Filter類(lèi)

            
              im.filter(filter) ? image
            
          

返回一個(gè)使用給定濾波器處理過(guò)的圖像的拷貝。在該模塊中,預(yù)先定義了很多增強(qiáng)濾波器,可以通過(guò)filter()函數(shù)使用,預(yù)定義濾波器包括:

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

其中BLUR就是均值濾波,CONTOUR找輪廓,F(xiàn)IND_EDGES邊緣檢測(cè),使用該模塊時(shí),需先導(dǎo)入。

            
              在學(xué)習(xí)過(guò)程中有什么不懂得可以加我的
python學(xué)習(xí)交流扣扣qun,784758214
群里有不錯(cuò)的學(xué)習(xí)視頻教程、開(kāi)發(fā)工具與電子書(shū)籍。
與你分享python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)好python,和學(xué)習(xí)什么內(nèi)容
from PIL import Image
from PIL import ImageFilter ## 調(diào)取ImageFilter
img = Image.open("123.jpg")
blu = imgF.filter(ImageFilter.BLUR) ##均值濾波
con = imgF.filter(ImageFilter.CONTOUR) ##找輪廓
edge = imgF.filter(ImageFilter.FIND_EDGES) ##邊緣檢測(cè)
blu.save('k.jpg')
con.save('k2.jpg')
edge.save('k3.jpg')

            
          

看一下效果第一張是原圖,剩下的是根據(jù)我們?cè)O(shè)置的呈現(xiàn)的效果圖。

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第4張圖片

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第5張圖片

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第6張圖片

把Python當(dāng)PS用,你見(jiàn)過(guò)沒(méi)?_第7張圖片