Python实现照片墙 -- 521礼物不二之选

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        照片墙效果图如下:

文件目录结构如下:

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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值