特殊节日,先水一篇,后续补充详细解释,可以生成照片墙
import sys, os, shutil, math
from PIL import Image
import random
row = 8
col = 16
nw = 400
nh = 400
path = os.getcwd() # 获得当前路径
def generate_img_tmp():
if os.path.exists('tmp'): # tmp
shutil.rmtree('tmp')
os.makedirs('tmp')
file_ls = os.listdir(path + "/picture") # 图片所在文件夹
i = 0 # 图片计数
for file in file_ls:
name, extension = os.path.splitext(file)
if (
extension == '.png' or extension == '.jpg' or extension == '.jpeg') and name != 'splicing_picture': # select the image
i += 1
print('%s...%s%s' % (i, name, extension))
os.chdir(path)
im = Image.open(path + "/picture/" + file)
w, h = im.size
if nw == nh:
if w >= h:
box = ((w - h) // 2, 0, (w + h) // 2, h)
else:
box = (0, (h - w) // 2, w, (h + w) // 2)
region = im.crop(box)
else:
region = im
sname = '%s%s' % (str(i), '.png')
os.chdir('tmp')
region.save(sname, 'png')
def generate_img_name(num):
return str(random.randint(1, num))
def generate_img_wall():
os.chdir(path)
os.chdir('tmp')
picture_len = len(os.listdir(path + "/tmp"))
dest_im = Image.new('RGBA', (col * nw, row * nh),
(255, 255, 255))
for x in range(1, col + 1):
for y in range(1, row + 1):
try:
print(x, y)
src_im = Image.open("%s.png" % generate_img_name(picture_len)) # 随机返回图片名
resize_im = src_im.resize((nw, nh), Image.ANTIALIAS) # 重置大小
dest_im.paste(resize_im, ((x - 1) * nw, (y - 1) * nh)) # 贴图
except IOError:
pass
for x in range(1, col + 1):
for y in range(1, row + 1):
print(x, y)
try:
if x % 4 == 0 and y % 5 == 0:
src_im = Image.open("%s.png" % generate_img_name(picture_len))
resize_im = src_im.resize((nw * 2, nh * 2), Image.ANTIALIAS)
dest_im.paste(resize_im, ((x - 1) * nw, (y - 1) * nh))
except IOError:
pass
os.chdir(path) # ensure the path
dest_im.save('photo_wall.png', 'png')
dest_im.show() # finish
if __name__ == "__main__":
generate_img_tmp()
generate_img_wall()