照片墙效果图如下:

文件目录结构如下:

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')
本文介绍了一个使用Python编写的简易照片墙生成器。该程序能够从指定文件夹中随机选取图片,并按照预先设定的图案(如心形)进行排列,最终合成一张包含多张小图的大图。代码中涉及图片处理、随机选择文件等实用技巧。
951

被折叠的 条评论
为什么被折叠?



