情人节到了,用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日志, 公众号内回复‘照片墙’获取。
还有软件,安装包等等资料可以白嫖的哟!!