照片墙效果图如下:
文件目录结构如下:
pictures为图片墙的图片集合,一定要多放一点图片!!!
test.py脚本代码
xxx.jpg效果图
废话不多说,催化,上酸菜:
# -*- encoding:utf-8 -*-
import os
import random
import PIL.Image as Image
import numpy as np
# 设置图片矩阵
FRAME = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,1,0,0,0,0,2,0,0,0,0],
[0,0,1,1,1,1,0,0,1,0,0,1,0,0],
[0,1,2,0,1,1,1,1,1,1,1,1,1,0],
[0,1,0,0,1,4,0,0,0,1,1,1,1,0],
[0,1,1,1,1,0,0,0,0,1,1,1,1,0],
[0,0,1,1,1,0,0,0,0,2,0,1,0,0],
[0,0,0,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,1,1,1,1,0,0,0,0],
[0,0,0,0,0,1,1,1,1,0,0,0,0,0],
[0,0,0,0,0,0,1,1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
PICTURE_DIR = "C:/Users/zorrolzhang/Desktop/xxx/pictures/"
# 定义相关参数
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) # 照片墙需要的照片数
print(n_img,len(os.listdir(PICTURE_DIR)))
filenames = random.sample(os.listdir(PICTURE_DIR),n_img) # 随机选取n_img张照片
# 绘制爱心墙
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] != 0 :
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(PICTURE_DIR + filenames[i])
img = img.resize((SIZE * FRAME[y][x], SIZE * FRAME[y][x]), Image.ANTIALIAS)
img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))
i += 1
# 保存图片
img_bg.save('xxx.jpg')