九宮格圖片急灭,可能用得最多的地方就是微信朋友圈了姐浮。之所以要弄成九宮格圖片,就是因?yàn)閷⒁粡垐D切割成九張圖按次序排好葬馋,很有文藝感卖鲤,不僅符合審美,而且還能突出圖片顯示畴嘶,即便在縮略圖模式下也能看到整張圖全貌蛋逾。而針對一張完整圖的九宮格切割方式,也是很多窗悯。這里機(jī)智客只用我們以往經(jīng)常介紹的兩種技術(shù)方法來實(shí)現(xiàn)一下:用GIMP作圖軟件切割区匣;用Python編程來實(shí)現(xiàn)切割。
首先用GIMP作圖軟件蒋院,相信關(guān)注機(jī)智客的朋友們都了解亏钩,很早之前我們就介紹過這款跨平臺開源的“Photoshop”替代品,功能強(qiáng)大欺旧,小巧靈活姑丑。而用GIMP軟件要將一張圖切割成九宮格圖,也很簡單辞友。這就要用到切片工具栅哀。
在以前的文章里,我們介紹過GIMP的切片工具。這個(gè)在GIMP軟件里菜單的位置是濾鏡-網(wǎng)絡(luò)-切片昌屉。不過由于我們要做成九宮格圖,那么就要先將圖“切割”分為9個(gè)區(qū)域茵瀑。如圖所示间驮,我們只要從標(biāo)尺里拉出幾個(gè)分隔線,對圖片做好劃分马昨,然后才可以用切片工具竞帽。注意導(dǎo)出路徑、文件名這些基本參數(shù)要填寫正確鸿捧。然后執(zhí)行切片屹篓,就可以到相應(yīng)的文件夾里找已經(jīng)切割好的九宮格圖片了。
接下來是用Python編程的方法來實(shí)現(xiàn)圖片的九宮格圖處理匙奴。這個(gè)也很簡單堆巧。由于要涉及圖片處理,所以我們需要用Python的PIL庫泼菌。這個(gè)庫的安裝谍肤,機(jī)智客在以前的文章里都介紹學(xué)習(xí)過,網(wǎng)上也有哗伯,大家可以參考荒揣。PIL正確安裝后,然后把下列代碼保存成Py格式焊刹,就可以了系任,這個(gè)代碼一目了然,意思就是獲取待處理的原圖虐块,填充切割并另存俩滥。一共三個(gè)主要函數(shù),分別是填充非凌、切割和保存举农,比較簡單,而且也是網(wǎng)上公開的技術(shù)敞嗡,所以無需贅述颁糟。最后雙擊執(zhí)行就可以自動(dòng)化處理了。
from PIL import Image
import sys
# 先將input image 填充為正方形
def fill_image(image):
width, height = image.size
# 選取機(jī)智客的原圖片長喉悴、寬中較大值作為新圖片的九宮格半徑
new_image_length = width if width > height else height
# 生產(chǎn)新圖片【白底】
new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
# 將原圖粘貼在新圖上棱貌,位置為居中
if width > height:
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
# 一行放3張圖
item_width = int(width / 3)
box_list = []
for i in range(0, 3):
for j in range(0, 3):
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('F:\\jobst\\'+str(index) + '.png', 'PNG')
index += 1
if __name__ == '__main__':
file_path = "F:\jobst\機(jī)智客01.jpg"
image = Image.open(file_path)
# image.show()
image = fill_image(image)
image_list = cut_image(image)
print(len(image_list))
save_images(image_list)