Python实现520表白墙(超详细) 送给你的另一半吧

        每一步都超级详细,本例中我使用的是SimHei.ttf字体,如果电脑文件中无该字体可以换为别的字体或者自行下载。请将字体文件和该程序放在同一目录下,该目录下应该还要有images文件夹,该文件夹存放.jpg格式的照片,直接运行该代码,就会生成一张一个图片名为520.jpg的图片,该图片就是照片墙。

注:字体样式、字体大小和字体颜色、背景颜色还有字体宽度、字体高度都可自行调整。

'''
1. 照片墙的字体摆放
2. 如何把图片贴到照片墙上(根据字体的形状)
'''

import pygame # 第三方模块 做小游戏 组件模块要记忆(查看官方文档) 字体文件组件

size = 50 # 字体大小
text = '520' # 字体形状,后续可以修改成名字


pygame.init() # 初始化模块

# 'SimHei.ttf' 字体文件
# size 字体的大小
font = pygame.font.Font('SimHei.ttf', size) # 定义字体SimHei.ttf (对象)
print(font)

# 渲染字体
# text字体形状
# True 默认锯齿
# (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() # 字体的宽度
print('height', height)
print('width', width)

print(font_text.get_at((0, 0))[0])

# 像素值,指定成一个二维列表

image_row_list = []
for x in range(height):
    image_col_list = []
    for y in range(width):
        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)
print(image_row_list)

for row in image_row_list:
    print(row )

"""根据矩阵贴图片"""
# 获取二维列表的高度和宽度
width_list = len(image_row_list[0])
height_list = len(image_row_list)

from PIL import Image # 导入图像处理模块 第三方模块
import os # 文件操作模块
import random

# 贴图必须要有一个画布
new_image = Image.new('RGB', (width * 100, height * 100), (255, 255, 255))

# 设置每个图片缩放的尺寸
size = 100

for row in range(height_list):
    for col in range(width_list):
        if image_row_list[row][col] == 1: # 如果是1 贴图
            # 随选择一张图片(路径) 用图像模块打开
            source_image = Image.open('images\' + random.choice(os.listdir('images'))) # 随选择一张图片(路径) 用图像模块打开
            source_image = source_image.resize((size, size), Image.ANTIALIAS) # 使用抗锯齿
            new_image.paste(source_image, (col * size, row * size))

print('正在生成照片墙...')
new_image.save(text + '.jpg')
print('生成完毕...')

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>