python九宮格圖片的原理

daxuesheng發表於2021-09-11

python九宮格圖片的原理

原理

1、用Python製作的九宮格影像生成器包裝exe檔案,使用者無需部署安裝Python的開發環境,即可在當地執行該程式,快速生成九宮格影像。

2、用PIL庫不斷畫小區域,切下來儲存成新的小圖片。

例項

假設每一個格子的寬和高分別是w、h,那麼第row行(從0開始計數),第col列(從0開始計數)的格子左上角座標和右下角座標分別是(col * w, row * h),(col * w + w, r * h + h)。

# -*- coding: UTF-8 -*-
# 將一張圖片分成九張,九宮格
import tkinter as tk
from PIL import Image
import sys
 
 
#先將 input image 填充為正方形
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) #因為朋友圈一行放3張圖。
 box_list = []
 # (left, upper, right, lower)
 for i in range(0,3):
 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(str(index) + '.png', 'PNG')
 index += 1
 
 
# 點選按鈕,實現圖片分割
def cTofClicked():
 file_path=str(entryCd.get()) # 獲取要進行分割的圖片路徑
 image = Image.open(file_path)
 #image.show()
 image = fill_image(image)
 image_list = cut_image(image)
 save_images(image_list)
 labelcTof.config(text="九宮格圖片已生,請在程式所在目錄檢視!")
 
# 窗體
top=tk.Tk()
top.title('九宮格圖片生成器')
labelcTof=tk.Label(top,text="請輸入要進行轉換的圖片路徑:",height=4,
 width=40,fg="blue")
labelcTof.pack()
entryCd=tk.Entry(top,text='0') # 文字框,獲取圖片路徑
entryCd.pack()
label_tip=tk.Label(top,text="請檢查圖片路徑是否輸入正確!",height=2,
 width=40,fg="gray")
label_tip.pack()
btnCal=tk.Button(top,text="點選生成九宮格圖片",fg="red",bg="yellow",command=cTofClicked) # 點選回撥函式
btnCal.pack()
 
top.mainloop() # 執行主迴圈

以上就是python九宮格圖片的原理,希望對大家有所幫助。更多Python學習指路:

本文教程操作環境:windows7系統、Python 3.9.1,DELL G3電腦。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4692/viewspace-2829736/,如需轉載,請註明出處,否則將追究法律責任。

相關文章