【效果预览】
还在为520礼物发愁吗,用一个巨大的心,把所有的浪漫瞬间都装下,建议去打印店打出来效果更佳。 成本低廉,但却走心。还在为520礼物发愁吗?教你用python撩女朋友_导包
【话不多说,代码奉上。】

import os
import random
import numpy as np
import PIL.Image as Image

# 设置图片矩阵
FRAME = [[0,0,1,1,0,0,0,0,1,1,0,0],
[0,1,1,1,1,0,0,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],
[0,1,1,1,1,1,1,1,1,1,1,0],
[0,0,1,1,1,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,1,1,0,0,0],
[0,0,0,0,1,1,1,1,0,0,0,0],
[0,0,0,0,0,1,1,0,0,0,0,0]]

# 定义相关参数
SIZE = 100 # 每张图片的尺寸,越大越清晰
N = 1 # 每个点位上放置1*1张图片

# 计算相关参数
width = np.shape(FRAME)[1]*N*SIZE # 照片墙宽度
height = np.shape(FRAME)[0]*N*SIZE # 照片墙高度
n_img = np.sum(FRAME)*(N**2) # 照片墙需要的照片数
dir = '/Users/xxx/Downloads/picture/'
filenames = random.sample(os.listdir(dir),n_img) # 随机选取n_img张照片
filenames = [dir+f for f in filenames]

# 绘制爱心墙
img_bg = Image.new('RGB', (width, height)) # 设置照片墙背景
i = 0
for y in range(np.shape(FRAME)[0]):
for x in range(np.shape(FRAME)[1]):
if FRAME[y][x] == 1: # 如果需要填充
pos_x = x * N * SIZE # 填充起始X坐标位置
pos_y = y * N * SIZE # 填充起始Y坐标位置
for yy in range(N):
for xx in range(N):
img = Image.open(filenames[i])
img = img.resize((SIZE, SIZE), Image.ANTIALIAS)
img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))
i += 1

# 保存图片
img_bg.save('love.jpg')

当然,仅靠一张记录点滴的照片还是不够的,还需要加上口红、香水、火锅等实质性礼物哟。

【答疑】

很多人私信我运行失败,统一回答一下:

1.修改【目录】(目录!!带"/"结束的,不是一个文件)

2.【目录】里放90(数矩阵里1的个数)张以上照片。

3.导入顶部的包