1. 程式人生 > >Python的一個“騷操作”!

Python的一個“騷操作”!

ask 分享 無限制 archive site image 插值 com 變量

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

技術分享圖片
作為一個愛折騰的程序猿能用代碼的解決的事情絕對不會用其他的方式,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/imagingbook/

代碼實現

先上一個效果圖。

技術分享圖片
實現這個效果使用的是PIL中的Blend類

Image.blend(image1,image2,alpha)

?image

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

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

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

1from PIL import Image
2im1 = Image.open("124.jpg")
3im2 = Image.open("123.jpg")
4print(im1.mode,im1.size)
5print(im2.mode,im2.size)
6im = Image.blend(im1, im2, 0.3)
7im.save(‘k3.jpg‘)
當然除了上面的方法還可以使用Composite類

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

復合類使用給定的兩張圖像及mask圖像作為透明度,插值出一張新的圖像。變量mask圖像的模式可以為“1”,“L”或者“RGBA”。所有圖像必須有相同的尺寸。

1from PIL import Image
2im1 = Image.open("124.jpg")
3im2 = Image.open("123.jpg")
4r,g,b = im1.split()
5print(b.mode)
6print(im1.mode,im1.size)
7print(im2.mode,im2.size)
8im = Image.composite(im1,im2,b)
9im.save(‘k1.jpg‘)
自己只是做了一個簡單的測試大家可以通過這種方法做出更好看的圖片,PIL不僅可以使兩張圖片進行重合,還可以給圖片添加水印。

1from PIL import Image, ImageDraw,ImageFont
2#將原來的圖片轉換為RGBA模式
3im = Image.open(r"timg2.png").convert(‘RGBA‘)
4#新建一個圖片,尺寸與上面的尺寸一樣,透明度為0即完全透明
5txt=Image.new(‘RGBA‘, im.size, (0,0,0,0))
6#設置要寫文字的字體
7fnt=ImageFont.truetype("D:PycharmProjectsmusicSIMYOU.TTF", 30)
8#打漢字
9d=ImageDraw.Draw(txt)
10#寫要打的位置,內容,用的字體,文字透明度
11d.text((txt.size[0]-205,txt.size[1]-50),"@Ahab雜貨鋪",font=fnt, fill=(255,0,0,300))
12#兩個圖片復合
13out=Image.alpha_composite(im, txt)
14#保存加水印後的圖片
15out.save(r"KB.png")

技術分享圖片

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

Filter類

im.filter(filter) ? image

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

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

1from PIL import Image
2from PIL import ImageFilter ## 調取ImageFilter
3img = Image.open("123.jpg")
4blu = imgF.filter(ImageFilter.BLUR) ##均值濾波
5con = imgF.filter(ImageFilter.CONTOUR) ##找輪廓
6edge = imgF.filter(ImageFilter.FIND_EDGES) ##邊緣檢測
7blu.save(‘k.jpg‘)
8con.save(‘k2.jpg‘)
9edge.save(‘k3.jpg‘)
看一下效果第一張是原圖,剩下的是根據我們設置的呈現的效果圖。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

好啦,以上就是我的分享,如果你跟我一樣都喜歡python,想成為一名優秀的程序員,也在學習python的道路上奔跑,歡迎你加入python學習群:839383765 群內每天都會分享最新業內資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

Python的一個“騷操作”!