如何使用Python实现一个心型照片墙
Admin 2022-08-19 群英技术资讯 955 次浏览
这篇文章主要讲解了“如何使用Python实现一个心型照片墙”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Python实现一个心型照片墙”吧!每到一年一度的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')
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于Python的相关知识,其中Pandas是最流行的用于数据分析的 Python 库。它提供高度优化的性能。本文将利用Python进行数据分析,下面一起来看一下,希望对大家有帮助。
SymPy是一个Python库,专注于符号数学,它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。本文将利用SymPy实现四行代码秒解微积分,感兴趣的可以学习一下
用Python处理数据,然后用Folium将它在Leaflet地图上进行可视化。Folium能够将通过Python处理后的数据轻松地在交互式的Leaflet地图上进行可视化展示。它不单单可以在地图上展示数据的分布图,还可以使用Vincent/Vega在地图上加以标记。
大家好,本篇文章主要讲的是Python中引用传参四种方式介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
这篇文章主要为大家介绍了Python函数和模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008