用python为心爱的人制作520照片墙,已成功做出效果图

yizhihongxing

马上又要进入一年一度的520了,作为一个地地道道的程序猿心里慌得一批。除了吃饭买礼物看电影好像就没有更多的想法了,于是想想将女友从以前到现在的所有照片整理了一下准备制作一个前所未有的照片墙。

【阅读全文】

当然,这里我使用的照片是从百度上面拿下来的,私人照片不能公开,哈哈~

file

没有女朋友的也可以试试,毕竟万一哪天就有了呢!

话不多说,进入正题吧,先将需要的非标准库梳理一下,只有一个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:softwarepycharm-workspacethe-publictest008images"
source_imgs = os.listdir(source_img_dir)

没有女朋友照片的也不要灰心,可以去百度上面下载哈,可以看看我之前的文章'百度图片下载2.0'下载很多很多的照片,哈哈哈哈!

file

接下来就可以来生成我们期待的心形照片墙了,进入收割环节。

# 定义一个下标值,方便从我们的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')

至此,终于大功告成了,感谢大家一直以前的陪伴与支持,我们会继续努力做出更多精彩的内容!

file

【往期精彩】

两个库搞定python中引用javascript代码块/文件...

python实现excel数据与mysql数据库互通有无!

python 实现超快窗口截图,自动获取当前活动窗口并展示截图...

怎么用python做一个解压缩小工具,以后再也不用下载各种格式的解压缩软件了...

python中最简单的turtle绘图:奥运五环!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用python为心爱的人制作520照片墙,已成功做出效果图 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 两个库搞定python中引用javascript代码块/文件

    在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件,比如:爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。 【阅读全文】 在python编程中提供了两个非标准库js2py与PyExecJS都能实现在python中运行代码块的效果的。 1、js2py的使用过程 js2py适用于js代码少量情况,如果用于很长的…

    2023年4月2日
    00
  • python 实现超快窗口截图,自动获取当前活动窗口并展示截图

    实现思路是先获取到当前最上面活动的窗口信息,然后提取该窗口的名称信息。 【阅读全文】 之后获取窗口的坐标信息,即左上角的开始坐标及右下角的结束坐标。最后直接截图并将截图的图片进行展示。 其中用到了两个第三方模块,分别是win32gui和Pillow,安装命令如下: pip install Pillow pip install win32gui 将其中使用到的…

    2023年4月2日
    00
  • python 一行命令开启网络间的文件共享

    这个文件共享的功能是基于python实现,所以必须具备python环境。没有python环境的直接到官网去下载就可以了,这里分享一下官网的下载地址。 【阅读全文】 https://www.python.org/getit/ 准备好了python环境就可以进入正式环节了。 创建一个文件夹专门用来存放需要共享的文件,注意这里的共享文件最好使用压缩包的方式这样其他…

    2023年4月2日
    00
  • 零配置python日志,安装即用

    写了很多年的python日志都是使用内置的logging模块来完成的,使用时都需要经过繁琐的配置。有时候,还可能出现丢失日志的情况,直到loguru的出现。 【阅读全文】 loguru真的是十分的简单的,安装之后直接导入到python代码块中即可直接使用。 1、安装环境 我们还是按照pip的方式来进行安装,默认使用清华大学的镜像站。 pip install …

    2023年4月2日
    00
  • 小王,给这2000个客户发一下节日祝福的邮件

    【阅读全文】演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。 将UI处理的相关的界面包导入进来 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * #…

    2023年4月2日
    00
  • python多线程同步售票系统解决思路

    解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 【阅读全文】 1、分析过程 分析:主要信息点是10家App平台同时售卖1000张电影票。此时,可以使用10个python线程来作为10家App平台,同时售卖必须保证电影票数量的同步,比如A平台卖出了一…

    2023年4月2日
    00
  • python做一个微型美颜图片处理器,十行代码即可完成

    【阅读全文】 图片美颜处理的实现思路就是使用cv2非标准库对图片做双边过滤,使其达到美颜的效果。 将cv2非标准库导入到代码块中 import cv2 准备好需要美颜的图片,源图片是在百度上面找的用来做测试用。 读取准备好的原始图片 source = cv2.imread(“source.jpeg”) 对准备好的原始图片执行双边过滤 target = cv2…

    2023年4月2日
    00
  • python如何实现网络测试,了解一下speedtest-cli…

    它是一款面向开发人员的互联网连接测量工具。Speedtest CLI 为命令行带来 Speedtest 背后的可信技术和全球服务器网络。 【阅读全文】 Speedtest CLI 专为软件开发人员、系统管理员和计算机爱好者等打造,是 Ookla® 提供技术支持的首款正式 Linux 本机 Speedtest 应用程序。 Speedtest CLI是使用pyt…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部