啊
七夕七夕快来啦
猛男帅哥掉头发
要问为何掉头发
礼物不知要送啥
直男礼物被她骂
送的随意被暴打
淘宝求助真是好
被指直男没得跑
总结下来就一句
单身就是没烦恼
天下直男千千万
送过照片墙的占一半
一般还都是黑白的
本着从哪里跌倒就要从哪里爬起来的原则
我一定要坚持给你们分享
照!
片!
墙!
这篇博文就是上一篇的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、写在最后
如果你送了这份照片
还没分手的
就对你女朋友好一点吧
毕竟找到一个眼神不好的
不容易!