1. 程式人生 > 其它 >什麼叫程式設計師的浪漫,只要能用程式碼做成的都不叫事,Python製作炫酷七夕照片牆

什麼叫程式設計師的浪漫,只要能用程式碼做成的都不叫事,Python製作炫酷七夕照片牆

前言

距離七夕節還有2天了,想好怎麼“殺狗”和去哪玩了嗎

今天來教大家做一個“七夕照片牆”,可以把她/他的照片,合成一張你指定形狀的圖片

沒有物件照片的,就自己想辦法吧

Python從零基礎入門到實戰系統教程、原始碼、視訊

線上一對一解答,​可以加群:1039649593

第一步:匯入所需的模組

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('生成完畢, 請在當前檔案專案下找照片牆檔案')