python PIL 生成照片墙

特殊节日,先水一篇,后续补充详细解释,可以生成照片墙

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()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值