距離七夕節還有2天了,想好怎麼「殺狗」和去哪玩了嗎app
今天來教你們作一個「七夕照片牆」,能夠把她/他的照片,合成一張你指定形狀的圖片dom
沒有對象照片的,就本身想辦法吧字體
import os import random import pygame # pip install pygame from PIL import Image # pip install pillow
pygame.init()
text = '七夕快樂' # 字體形狀, 能夠修改爲名字 size = 30 # 字體大小 # 定義字體,參數依次是字體、字體大小 font = pygame.font.Font('msyh.ttc', size) print(font)
# 渲染字體,參數依次是被渲染的文字、是否無鋸齒、字體顏色、背景顏色 # (0, 0, 0) 黑色 (255, 255, 255) 白色 font_text = font.render(text, True, (0, 0, 0), (255, 255, 255)) print(font_text) # 獲取渲染後的字體的高度和寬度 height = font_text.get_height() # 高度 width = font_text.get_width() # 寬度
# 最後全部像素點會成爲一個二維列表(形如[[1,2,3],[4,5,6]]),image_row_list是最外層的、總的列表 image_row_list = [] for x in range(height): # image_col_list 是 image_row_list 中的每個列表元素 image_col_list = [] for y in range(width): # get_at((x,y))是返回像素點的像素值,[0]爲第一個值R, # 因爲渲染後的圖只有黑色和白色,因此只要[0]!=255,就是黑色 if font_text.get_at((y, x))[0] != 255: # 若是像素點不是 白色 image_col_list.append(1) else: image_col_list.append(0) image_row_list.append(image_col_list) for row in image_row_list: print(row)
# 獲取 image_row_list 列表的寬度和高度 width = len(image_row_list[0]) height = len(image_row_list) # 設置最終輸出的圖片new_image,顏色模式RGB,寬和高分別放大100和100倍,背景色爲白色。 new_image = Image.new('RGB', (100 * width, 100 * height), (255, 255, 255)) # 設置每個(原圖集)小圖的裁剪尺寸 size = 100 # 遍歷全部的像素點,若是像素點爲1,也就是有顏色,則隨機選擇一張圖片,將像素點填充爲這張圖片 for row in range(height): for col in range(width): if image_row_list[row][col] == 1: # 從本地讀取文件 source_image = Image.open('images\\' + random.choice(os.listdir(r'images'))) # 從新修改文件大小 source_image = source_image.resize((size, size), Image.ANTIALIAS) # 是否使用抗鋸齒(antialias)功能 # 將圖片複製到 new_image new_image.paste(source_image, (col * size, row * size))
print('正在生成照片牆...') new_image.save(text + '.jpg') print('生成完畢, 請在當前文件項目下找照片牆文件')