歡迎光臨
每天分享高質量文章

用Python發一個高逼格的朋友圈

來自:大資料前沿(微信號:bigdataqianyan)

今天要給大家介紹一個Python庫:

PIL(Python Image Library)

下麵我們用一個實際的例子

看看50行python代碼可以做什麼神奇的事情


這是二胖發的一個朋友圈

切圖前是一張圖

切圖後就是九張圖啦

成功霸屏?

除了可以處理規整的正方形圖片

還可以處理非規則的圖片

比如下麵這張寬度遠大於高度的圖片

二胖是怎麼處理的呢?


很簡單

取寬和高之間的較大值

然後填充白色

就可以構造出一張正方形的圖片啦

當然,想把一張圖片做成這樣子也很容易啦,現在很多手機上的圖片處理軟體都能實現。

二胖舉這個例子只是為了給大家介紹介紹PIL庫,感興趣的童鞋也可以練習練習編程嘛~

好了,現在就來看看這個PIL庫到底是個什麼吧~

PIL是一個功能非常強大的Python圖像處理標準庫,但是呢,由於PIL支持Python2.7,所以使用Python3的程式猿們又在PIL的基礎上分離出來了一個分支,創建了另外一個庫Pillow,是可以支持Python3。Pillow兼容了PIL的大部分語法,使用起來也非常的簡單。


下麵二胖就講講是如何使用PIL庫實現了上文介紹的小程式。

其實思路很簡單:

對應代碼如下:

# -*- coding: utf-8 -*-
''' 將一張圖片填充為正方形後切為9張圖 Author:微信公眾號:大資料前沿 教程與文件:關註微信公眾號 大資料前沿 回覆 微信切圖 獲取。 '''
from PIL import Image
import sys
#將圖片填充為正方形
def fill_image(image):    width, height = image.size    
   #選取長和寬中較大值作為新圖片的    new_image_length = width if width > height else height    
   #生成新圖片[白底]    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')    
   #將之前的圖粘貼在新圖上,居中    if width > height:#原圖寬大於高,則填充圖片的豎直維度
       #(x,y)二元組表示粘貼上圖相對下圖的起始位置        new_image.paste(image, (0, int((new_image_length - height) / 2)))    else:        new_image.paste(image, (int((new_image_length - width) / 2),0))    
   return new_image
#切圖
def cut_image(image):    width, height = image.size    item_width = int(width / 3)    box_list = []    
   # (left, upper, right, lower)    for i in range(0,3):#兩重迴圈,生成9張圖片基於原圖的位置        for j in range(0,3):          
           #print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))            box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)            box_list.append(box)    image_list = [image.crop(box) for box in box_list]    
   return image_list
#儲存
def save_images(image_list):    index = 1    for image in image_list:        image.save('./result/python'+str(index) + '.png', 'PNG')        index += 1

if __name__ == '__main__':    file_path = "python.jpeg"    image = Image.open(file_path)  
   #image.show()    image = fill_image(image)    image_list = cut_image(image)    save_images(image_list)

相信大家看了代碼就知道是怎麼實現的了吧,代碼中可能比較難理解的地方二胖也給出了相應的註釋,大家趕快把代碼下載下來拿去跑一跑。

github地址:

https://github.com/yangxuan0928/cut_image


編號499,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂