欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

情人节到了,用Python自动生成520照片墙吧~

时间:2023-05-28
导语

情人节到了,用Python自动生成520照片墙可好,没有对象的自己看

相关文件

关注微信公众号 Python日志, 公众号内回复‘照片墙’获取。

视频教学

视频教学:哔哩哔哩照片墙制作

开发工具

Python版本:3.6.4
相关模块:
pillow模块;
argparse模块;
google_images_download模块
以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理

T_T首先,作为一个单身狗,先上Google图片爬一波女神的美图吧。懒得自己动手写爬虫了,所以直接找了个别人开源的库用了。在终端运行:

pip install google_images_download

然后在终端运行:

googleimagesdownload -k "刘亦菲" -l 50其中各参数含义为:-k:Google图片搜索的关键词;-l:需要下载的图片数量。

效果如下:
然后写个小脚本批量重命名一下(强迫症?):

import ostarget_path = 'lyf'for idx, each in enumerate(os.listdir(target_path)): os.rename(os.path.join(target_path, each), os.path.join(target_path, '%s.jpg' % idx))

OK,前期准备算是完成了。现在可以开始设计我们的照片墙了。首先是读取图片并调整图片到固定大小以方便制作照片墙:

'''图片读取'''def readImage(img_path, target_size=(64, 64)): img = Image.open(img_path) img = img.resize(target_size) return img

然后搞个生成器方便批量读取:

'''图片生成器'''def yieldImage(target_dir, idx, target_size): img_paths = sorted([os.path.join(target_dir, imgname) for imgname in os.listdir(target_dir)]) idx = (idx + 1) % len(img_paths) return readImage(img_paths[idx], target_size), idx

OK,现在我们需要做的就是搞个模板文件,然后通过程序解析模板文件来生成我们想要生成的照片墙。这样每次想要生成新的照片墙只需要制作新的模板文件即可,而不需要再去修改我们的代码文件了。

那么如何制作这个模板文件呢?很简单,所谓照片墙,无非是用python先新建一个空图,然后把我们的图片一张张地贴到空图上的指定位置,例如这样:

那么我们可以人为地定义一个01矩阵,0代表对应位置不放图片,1代表对应位置放图片,然后把这个01矩阵作为模板文件保存即可,例如这样:

解析函数实现如下:

'''解析模板'''def parseTemplate(template_path): template = [] with open(template_path, 'r') as f: for line in f.readlines(): if line.startswith('#'): continue template.append(line.strip('n').split(',')) return template

最后我们就可以愉快地利用模板制作我们的照片墙啦,主函数代码如下:

'''主函数'''def main(pictures_dir, template_path): template = parseTemplate(template_path) w = len(template[0]) h = len(template) image_new = Image.new('RGBA', (CELLSIZE*w, CELLSIZE*h)) img_idx = -1 for y in range(h): for x in range(w): if template[y][x] == '1': img, img_idx = yieldImage(pictures_dir, img_idx, (CELLSIZE, CELLSIZE)) image_new.paste(img, (x*CELLSIZE, y*CELLSIZE)) image_new.show() image_new.save('picturewall.png')

效果:

运行格式为:
python wallPicture.py -t 模板路径 -p 存放照片的文件夹

我想大家应该学会了吧!!

源码获取

关注微信公众号 Python日志, 公众号内回复‘照片墙’获取。
还有软件,安装包等等资料可以白嫖的哟!!

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。