1 准备
1.1 背景图,我从今日头条下载正版图,注意命名bg,不要放在下面的pic文件夹中,否则会出现在爱心中。建议放在根目录下。
1.2 照片:多一点照片,建议≥48张,可自定义,建议名称1~48,用数字,是随机分布的;放在pic文件夹中,注意代码中的路径要修改。
1.3 python3.8,linux系统(Windows注意路径和目录格式修改)。
2 效果图
3 完整代码:
#---导出模块---import randomfrom PIL import Imageimport os #---定义图形---(可自定义)---fingure = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 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, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],]#---初始化定义---# 图片尺寸、像素PIC_WIDTH, PIC_HEIGHT = 100,100# 行数 、列数row_num, column_num = len(fingure),len(fingure[0])# 背景读取、设置尺寸,注意路径和图片格式img = Image.open("bg.jpeg").resize((column_num*PIC_WIDTH, row_num*PIC_HEIGHT))#读取照片名,注意pic后面没有/image_names = os.listdir("/home/xgj/Desktop/pic")#---推导式---排列图片 for row in range(row_num): for column in range(column_num): if fingure[row][column]: #注意pic后面有/ pic = Image.open("/home/xgj/Desktop/pic/" + random.choice(image_names)).resize((PIC_WIDTH, PIC_HEIGHT)) img.paste(pic, (PIC_WIDTH * column, PIC_HEIGHT * row))#保存图片及格式,这是默认根目录下img.save("new.png")
4 能不能自定义图形呢?当然可以。
4.1 先把1替换成0
4.2 啊呀,上面50,其实是48,我把这个也该了,替换回来。
# 图片尺寸、像素PIC_WIDTH, PIC_HEIGHT = 100,100
4.3 比如改成:520
4.4 效果图:
4.5 520照片墙.py完整代码:
#---导出模块---import randomfrom PIL import Imageimport os #---定义图形---(可自定义)---fingure = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],]#---初始化定义---# 图片尺寸、像素PIC_WIDTH, PIC_HEIGHT = 100,100# 行数 、列数row_num, column_num = len(fingure),len(fingure[0])# 背景读取、设置尺寸,注意路径和图片格式img = Image.open("bg.jpeg").resize((column_num*PIC_WIDTH, row_num*PIC_HEIGHT))#读取照片名,注意pic后面没有/image_names = os.listdir("/home/xgj/Desktop/pic")#---推导式---排列图片 for row in range(row_num): for column in range(column_num): if fingure[row][column]: #注意pic后面有/ pic = Image.open("/home/xgj/Desktop/pic/" + random.choice(image_names)).resize((PIC_WIDTH, PIC_HEIGHT)) img.paste(pic, (PIC_WIDTH * column, PIC_HEIGHT * row))#保存图片及格式,这是默认根目录下img.save("new520.png")
5 当然,其他图形可以自定义,好玩不?我分享出来,教给大家,可以自由发挥和创作哟。