如何使用Python实现一个心型照片墙

Admin 2022-08-19 群英技术资讯 402 次浏览

这篇文章主要讲解了“如何使用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')

以上就是关于“如何使用Python实现一个心型照片墙”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。 群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服