用python做任意文字图片墙
今天应产品经理夫人的要求,需给其做一张“青春”图与“爱心”图。
安排!!!
直接上代码:
import pygame
from PIL import Image
import os
import random
text = input("请输入你想要的文字:")
# text = '青春'
font_size = 30 # 字体大小
pygame.init() # 模块的初始化 为什么 pygame不是我开发的, 我们用的别人 python语法 三原色
font = pygame.font.Font('F:\\quantu\\simsun.ttc', font_size)#需要自行下载ttc文件![在这里插入图片描述](https://img-blog.csdnimg.cn/81ce7ab747cc4d86862eccc32fb0c285.png#pic_center)
print(font)
# 字体的渲染
# True 锯齿化 rgb 颜色 由三原色组成 黑 白
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((1, 1))[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) # 黑色添加数据1
else:
image_col_list.append(0) # 白色添加数据0
image_row_list.append(image_col_list)
for row in image_row_list:
print(row)
#心形图二维列表
map = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
]
# 贴图 照片墙 任意文字的
# width_len = len(image_row_list[0]) # 列表的宽
# height_len = len(image_row_list) # # 列表的高
#心形的
width_len = len(map[0]) # 列表的宽
height_len = len(map) # # 列表的高
# 创建图片
new_image = Image.new('RGB', (width_len * 100, height_len * 100), (255, 255, 255)) #图片背景纯色
# new_image = Image.open(r"F:\桌面\爬虫100\怕图片\src\·你算什么东西?.jpg").resize((width_len * 100, height_len * 100), Image.ANTIALIAS)#图片背景照片替换
# print(new_image.size())
# 贴图
img_size = 100 # 初始图片尺寸
# print(os.listdir(r'F:\\桌面\\爬虫100\\怕图片\\src'))
for row in range(height_len):
for clo in range(width_len):
# if image_row_list[row][clo] == 1: # 如过列表的值为1, 就贴图 任意文字
if map[row][clo] == 0: # 如过列表的值为1, 就贴图 心形
# 读取图片
source_image = Image.open('F:\\1\\心形图素材\\' + random.choice(os.listdir(r'F:\\1\\心形图素材')))
# 修改图片的大小
source_image = source_image.resize((img_size, img_size), Image.ANTIALIAS)
# 将图片复制到new_image
new_image.paste(source_image, (clo * img_size, row * img_size))
# 照片强保存
print('正在生成照片墙...')
new_image.save(text + '.png')
print('保存完毕, 请在当前文件项目下查找')
在这里插入图片描述