
目录前言代码实现第一步导入所需要的库第二步初始化模块第三步定义字体设定初始化大小第四步渲染字体第五步指定成二维列表第六步根据矩阵贴图最后生成图片配置及效果前言看了昨晚的跨年演唱会想必大家都被自己的idol的唱功或颜值所折服吧。今天就教大家如果用照片制作一副照片墙以我粉了多年的老薛作为例子叭~代码实现第一步导入所需要的库import pygame from PIL import Image import random import os第二步初始化模块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(rimages))) # 重新修改文件大小 source_image source_image.resize((size, size), Image.ANTIALIAS) # 是否使用抗锯齿antialias功能 # 将图片复制到 new_image new_image.paste(source_image, (col * size, row * size))最后生成图片new_image.save(text .jpg) print(保存完毕:, text)配置及效果把图片放在代码同级文件夹images下运行代码输入要生成的文字内容最终图片效果如下