python 照片墙,心形照片墙如何制作
在每年的520假期之前,程作为一个不折不扣的人,心里很慌,除了吃饭、买礼物和看电影,似乎没有更多的想法。本文教你用Python制作心形照片墙,有需要的可以参考。
每年,程作为一个彻头彻尾的,都会受到很多的恐慌。除了吃饭,买礼物,看电影,好像没有更多的想法了,所以想把女朋友从以前到现在的照片全部整理出来,做一个前所未有的照片墙。
当然我这里用的照片都是从百度上拍的,私密照片是不能公开的,哈哈~
如果你没有女朋友,可以试试。毕竟,如果有一天你有一个!
话不多说,言归正传。首先,整理出需要的非标准库。只有一个PIL图像处理库,另一个是os的标准库,用来操作文件。
从PIL进口图片
导入操作系统
然后,定义一个二维数组。这个二维数组由0和1组成。观察0位置的组合是一个心形。之后我们需要按照这个规律摆放需要的照片,形成心形的照片墙。
位置=[
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
]
需要注意的是,零的个数实际上就是照片的个数,所以尽可能的零的个数需要小于等于照片的个数。根据自己的实际情况进行微调也是可以的。
由于我们自己每张照片的大小可能不一样,所以放进去之后必须指定每张图片的大小。
Img_w=img_h=192 #宽度和高度都设置为192像素。
#计算位置二维数组的行数和列数
行数=长度(位置)
columns=len(位置[0])
#使用行数和列数以及每张图片的像素计算目标画布的大小。
canvas=Image.new(RGB ,(img _ w *列,img _ h *行),白色)
我们需要把我们的照片放在这块画布上。
下面带上我们需要的素材照片,设置好素材图片(女朋友照片)所在的文件夹。
source _ img _ dir=r c : \ software \ py charm-workspace \ the-public \ test 008 \ images
source _ imgs=OS . listdir(source _ img _ dir)
没有女朋友的照片也不要气馁。你可以去百度下载。可以看我之前的文章‘百度图片下载2.0’,下载很多很多照片,哈哈哈哈!
接下来就可以生成我们期待的心形照片墙了,进入收割流程。
#定义一个下标值,方便从我们的imgs数组中取出照片。
指数=0
#通过遍历二维数组中的行和列,我们可以将我们的照片放在相应的位置。
对于范围:中的行
对于范围:中的列
#如果当前二维数组中的元素是1,说明位置不是心脏需要的地方,所以不会处理。
如果位置[行][列]==1:
继续
#如果当前2D数组中的元素是1,你需要在那个位置放一张照片。
else:
尝试:
#获取一张图片,并将其作为图像对象打开
image=image . open(OS . path . join(source _ img _ dir,source_imgs[index])
#重设当前照片的大小
image=image.resize((img_w,img_h))
#将照片图像对象放在画布上的特定位置。
canvas.paste(image,(img_w * column,img_h * row))
#增加图片列表中图片的下标
指数=1
例外:
继续
展示照片墙
canvas.show()
保存照片墙
canvas . save(“heart-photo wall . png”)
关于用Python制作心形照片墙的效果这篇文章就到此为止了。有关Python photo wall的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。