Python-心型照片墙

七夕七夕快来啦

猛男帅哥掉头发

要问为何掉头发

礼物不知要送啥

直男礼物被她骂

送的随意被暴打

淘宝求助真是好

被指直男没得跑

总结下来就一句

单身就是没烦恼

天下直男千千万

送过照片墙的占一半

一般还都是黑白的

本着从哪里跌倒就要从哪里爬起来的原则

我一定要坚持给你们分享

照!

片!

墙!

这篇博文就是上一篇的PLUS版本

点这里

预想成果:

      寻摸着效果差不多就这样婶的:

      1、老鼻子多的小正方形组成一个大正方形,每个正方形都是一张照片。

      2、周围全是黑白的,中间来点乱麻七早的颜色,组装成一个已知的数学图形,比方圆形、正方形、长方形都行。

      3、如果你害有点留恋这酸臭的爱情,我建议你做成个心型。

图片


1、脚本目录

图片

 pictures中存放照片

有女朋友的放点女朋友的

没有女朋友的可以放点同类

2、分析:

       每张照片大小不一,形状不同。使用image中resize方法转换成相同大小

img = img.resize((SIZE * FRAME[y][x], SIZE * FRAME[y][x]), Image.ANTIALIAS)

       提前创建一个二维数组,不同数字代表不同的含义,以下代码中,0代表黑白照片,9代表占位,1代表此一个位置有一张彩色照片,同理,2代表周围2*2的空间有一张彩色照片。如果使用了2,那么2*2方格中剩下的三个位置需要使用9来占位。# 设置图片矩阵

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,9,1,1,1,1,1,1,1,1,1,0],         [0,1,9,9,1,4,9,9,9,1,1,1,1,0],         [0,1,1,1,1,9,9,9,9,1,1,1,1,0],         [0,0,1,1,1,9,9,9,9,2,9,1,0,0],         [0,0,0,1,1,9,9,9,9,9,9,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]]

        以上方矩阵为例,第四排第三列的元素为2,代表他右边和下边2*2的方格里有一张照片。所以2附近使用3个9填充。

3、0-9的数字处理,只需要对0和9做特殊处理,其余不变​​​​​

if FRAME[y][x] == 9 :            continue        elif 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        else :            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])                    length = 1 if FRAME[y][x] == 0 else FRAME[y][x]                    img = img.resize((SIZE * length, SIZE * length), Image.ANTIALIAS)                    img = img.convert('L')                    img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))                    i += 1

4、全部源码

# -*- 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,9,1,1,1,1,1,1,1,1,1,0],
         [0,1,9,9,1,4,9,9,9,1,1,1,1,0],
         [0,1,1,1,1,9,9,9,9,1,1,1,1,0],
         [0,0,1,1,1,9,9,9,9,2,9,1,0,0],
         [0,0,0,1,1,9,9,9,9,9,9,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)       # 照片墙需要的照片数
n_img = np.shape(FRAME)[1] * np.shape(FRAME)[0]*N
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] == 9 :
            continue
        elif 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
        else :
            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])
                    length = 1 if FRAME[y][x] == 0 else FRAME[y][x]
                    img = img.resize((SIZE * length, SIZE * length), Image.ANTIALIAS)
                    img = img.convert('L')
                    img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))
                    i += 1
 
# 保存图片
img_bg.save('xxx.jpg')​​​​​​​

5、运行截图

图片

图片

6、写在最后

如果你送了这份照片

还没分手的

就对你女朋友好一点吧

毕竟找到一个眼神不好的

不容易!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值