用python为心爱的人制作520照片墙,已成功做出效果图
2022/5/23 3:02:40
本文主要是介绍用python为心爱的人制作520照片墙,已成功做出效果图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
马上又要进入一年一度的520了,作为一个地地道道的程序猿心里慌得一批。除了吃饭买礼物看电影好像就没有更多的想法了,于是想想将女友从以前到现在的所有照片整理了一下准备制作一个前所未有的照片墙。
当然,这里我使用的照片是从百度上面拿下来的,私人照片不能公开,哈哈~
没有女朋友的也可以试试,毕竟万一哪天就有了呢!
话不多说,进入正题吧,先将需要的非标准库梳理一下,只有一个PIL图像处理库,另外一个是os的标准库是用来操作文件的。
from PIL import Image import os
然后,定义一个二维数组,这个二维数组是由0和1组成的,观察一下0的位置联合起来就是一个心的形状,之后我们需要按照这个规则将需要的照片放置上去就形成了一个心形的照片墙。
location = [ [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], ]
需要注意的是0的数量其实就是照片的数量,所以尽可能的0的数量是需要小于等于照片的数量,可以根据自己的实际情况进行微调一下也是OK的。
由于我们自己的照片每张的大小可能都是不统一的,所以必须指定一下每张图片放入后的大小。
img_w = img_h = 192 # 宽高都设置为192像素 # 计算location二维数组的行的个数、列的个数 rows = len(location) columns = len(location[0]) # 使用行、列的个数以及每张图片的像素计算出目标画布的大小。 canvas = Image.new("RGB", (img_w*columns, img_h*rows),"white")
我们需要在这个画布上面摆放我们的照片。
下面将我们需要的素材照片拿过来,设置素材图片(女友照片)所在的文件夹。
source_img_dir = r"C:\software\pycharm-workspace\the-public\test008\images" source_imgs = os.listdir(source_img_dir)
没有女朋友照片的也不要灰心,可以去百度上面下载哈,可以看看我之前的文章’百度图片下载2.0’下载很多很多的照片,哈哈哈哈!
接下来就可以来生成我们期待的心形照片墙了,进入收割环节。
# 定义一个下标值,方便从我们的imgs数组里面取出照片。 index = 0 # 通过遍历二维数组中的行、列,从而在相应的位置放上我们的照片。 for row in range(rows): for column in range(columns): # 若是当前二维数组中的元素为1时,表示该位置不在心形需要的位置上故不做处理。 if location[row][column] == 1: continue # 若是当前二维数组中的元素为1时,需要将一张照片放到该位置上 else: try: # 获取一张图片并打开为Image对象 image = Image.open(os.path.join(source_img_dir, source_imgs[index])) # 重新设置当前照片的尺寸大小 image = image.resize((img_w, img_h)) # 将照片image对象,放在画布的特定位置 canvas.paste(image, (img_w * column, img_h * row)) # 递增图片列表中的图片下标 index += 1 except: continue
展示照片墙
canvas.show()
保存照片墙
canvas.save('心形-照片墙.png')
至此,终于大功告成了,感谢大家一直以前的陪伴与支持,我们会继续努力做出更多精彩的内容!
这篇关于用python为心爱的人制作520照片墙,已成功做出效果图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22初创企业的效率秘诀!实用的看板式任务管理工具推荐
- 2024-12-22新能源汽车销售难题如何破?看板工具助力门店管理升级
- 2024-12-218 款现代无代码工具,轻松提升开发者工作效率 ???????
- 2024-12-21从线索跟踪到业绩提升:销售任务管理系统推荐
- 2024-12-21刚刚发布RobinReach:多渠道社交媒体管理工具 ??
- 2024-12-21跨地域协作无压力!推荐几款必备的可视化协同工具
- 2024-12-21初学者指南:轻松掌握文章编辑器
- 2024-12-21Excel数据导出教程:让数据迁移变得简单
- 2024-12-21Excel数据导入入门教程
- 2024-12-215分钟速览:优化项目管理必备的5款高效工具