admin 管理员组

文章数量: 1087747

python将后宫佳丽三千做成照片墙

上一篇文字用python爬取后宫佳丽三千,我们爬取了很多小姐姐,太多了怎么办,没事,直接做成照片墙,我全都要
效果图:

项目结构:

完整代码:

from PIL import Image, ImageDraw, ImageFont
# 解决读取图片报错
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
import os# 获取文字
def gen_text_img(text, font_size, font_path=None):'''输入:text:照片墙的样式文字font_size:字体的大小font_path:字体返回:文字图像'''font = ImageFont.truetype(font_path, font_size)(width, length) = font.getsize(text)text_img = Image.new('RGBA', (width, length))draw = ImageDraw.Draw(text_img)# 从左上角开始绘制draw.text((0, 0), text, fill=(0, 0, 0), font=font)return text_imgdef trans_alpha(img, pixel):'''R:红G:绿B:蓝A:透明'''_, _, _, alpha = img.split()alpha = alpha.point(lambda i: pixel[-1] * 10)img.putalpha(alpha)return imgdef picture_wall_mask(text_img, edge_len, pic_dir):'''输入:text_img:文字图像edge_len:照片边长(用于扩大像素)pic_dir:路径'''# 像素扩大new_img = Image.new('RGBA', (text_img.size[0] * edge_len, text_img.size[1] * edge_len))file_list = os.listdir(pic_dir)img_index = 0for x in range(0, text_img.size[0]):for y in range(0, text_img.size[1]):pixel = text_img.getpixel((x, y))file_name = file_list[img_index % len(file_list)]try:# 导入图片img = Image.open(os.path.join(pic_dir, file_name)).convert('RGBA')img = img.resize((edge_len, edge_len))img = trans_alpha(img, pixel)# 进行替换new_img.paste(img,(x * edge_len, y * edge_len))img_index += 1except Exception as e:print(f"文件打开失败:{file_name} + {e}")return new_imgdef main(text='我全都要',font_size=20,edge_len=60,pic_dir="./wall",out_dir="./out",font_path='buzz_cloud_font.ttf'):'''生成照片墙:param text: 照片墙字符样式:param font_size: 字体大小:param edge_len: sub picture's egde length'''if len(text) >= 1:text_ = ' '.join(text)print(f"generate text wall for '{text_}' with picture path:{pic_dir}")text_img = gen_text_img(text_, font_size, font_path)img_ascii = picture_wall_mask(text_img, edge_len, pic_dir)img_ascii.save(out_dir + os.path.sep + ''.join(text) + '.png')if __name__ == '__main__':main()

main方法关键的地方说明一下:
text:这里可以随便输入,英文或者中文
pic_dir:这是我们源照片的地方,我新建了一个文件夹wall,将照片都仍了进去
out_dir:这是合成后照片输出位置,新建一个文件夹叫out
font_path:这是字体,我们将一个文件放到目录下buzz_cloud_font.ttf
完整项目下载地址:.git

本文标签: python将后宫佳丽三千做成照片墙