本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用。

先来看一下具体的效果。

运行程序。

点击「选择图片」 选择JPG/JPGE/PNG三种中任意一种格式的图片,然后点击生成表白图片则可。这里还要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

比如我选择了一张「进击的巨人」图片,其生成效果如下。

将图片放大看看,会发现图片全部由「我喜欢你!」构成。

编码时刻

我们知道图片由不同的像素组成,每个像素都有自己的颜色,通过RGB来表示,如图。

(图出自 easyai)

RGB本身就是一个数组:(a,b,c),数组中的每一位的取值范围都是0~255,比如黑色可以通过(0,0,0)来表示。

我只需要将图片中每个像素的RGB值都取出,并使用这个RGB值作为字体的颜色则可,这样生成的图片从远处来看依旧会是原本图像的轮廓。

有了具体的思路,就可以编写代码了。完整代码在文末,这里先看关键代码片段理解思路。

在Python中可以通过PIL来实现对图片的各种操作。

首先安装一下PIL。

pip install pillow

复制代码

PIL消极维护,一群爱好者fork了PIL的代码,并在其之上进行维护与修改,fork后的代码项目称为pillow。

首先,通过PIL.Image打开图片并通过load方法加载图片数组

# 打开图片

img_raw = Image.open(img_path)

# 加载图片的像素数组

img_array = img_raw.load()

复制代码

然后创建一张新的画布并设置好要使用的字体和字体大小,用来绘制待生成的图像。

img_new = Image.new("RGB", img_raw.size, (0, 0, 0))

draw = ImageDraw.Draw(img_new)

font = ImageFont.truetype(‘SimHei.ttf‘, font_size)

复制代码

最后就是循环img_raw并将图像像素数组对应的值赋值给字体,作为字体的颜色。

for y in range(0, img_raw.size[1], font_size):

for x in range(0, img_raw.size[0], font_size):

# 绘制文字并赋值颜色,具体为fill参数

draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)

复制代码

至此大功告成。

是否可以再优化一下?

为了让没有编程经验的朋友可以轻松使用,我决定用tkinter做一个简陋的界面,再使用pyinstaller进行打包,让各位无需安装Python环境与PIL,直接开箱即用。

tkinter是Python内置的桌面应用框架,相比于PyQT5,它更加轻便,但功能也更加简陋,但用于开发表白神器已经足够了,tkinter内置于Python,不行安装,直接使用。

这里同样给出部分代码,完整代码看文末。

首先创建一个界面。

self.window = window

self.window.title(‘表白神器‘)

self.window.geometry(‘300x200‘)

menubar = Menu(self.window)

复制代码

然后定义两个按钮与对应的响应方法。

# 选择图片

btn1 = Button(window, text=‘选择图片‘, width=15, height=2, command=self.get_img)

btn1.pack()

# 生成图片

self.send_btn = Button(window, text=‘生成表白图片‘, width=15, height=2, command=self.gen_img)

self.send_btn.pack()

复制代码

当点击选择图片按钮时,get_img方法会被调用,具体代码如下。

def get_img(self):

global IMGPATH

# 选择文件

filenames = askopenfilenames(filetypes=(("jpeg img", "*.jpeg"), ("jpg img", "*.jpg"), ("png img", "*.png")))

if len(filenames) > 0:

fnlist = [fn for fn in filenames]

fnstr = ‘\n‘.join(fnlist)

self.l.config(text=fnstr) # 显示选择了什么文件

IMGPATH = fnlist

else:

self.l.config(text=‘目前没有选择任何图片文件‘)

复制代码

上述代码中,get_img方法通过tkinter的askopenfilenames方法打开系统的文件选择框,通过filetypes参数指定可以选择的文件类型,最终该方法会返回该文件完整的文件路径。

点击生成图片时,会调用gen_img方法,该方法就是调用前面编写好生成图像的方法,不再赘述。

最后

为了方便他人使用,我通过pyinstaller将表白程序打包。windows下的朋友可以直接下载,然后解压使用,找到压缩文件中的loveyou.exe,双击运行则可使用。

注意:表白图片会生成在loveyou.exe的相同目录下。

都懂了吗?最后注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

python制作表白神器_用Python做一个520表白神器,值得收藏相关推荐

  1. python写520_用Python做一个520表白神器,值得收藏

    本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用. 先来看一下具体的效果. 运行程序. 用Python做一个520表白神器,值得收藏 点击「 ...

  2. python 情书_用Python做一个520表白神器,值得收藏(示例代码)

    本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用. 先来看一下具体的效果. 运行程序. 点击「选择图片」 选择JPG/JPGE/PNG三种中 ...

  3. python制作音乐模块_用Python打造一个只属于你的专属音乐播放器,享受动手的快乐!...

    平常我们总是用爬虫爬取网页上的音乐,今天我们换个玩法,用Python制作一个独一无二只属于你的音乐播放器,小伙伴们觉得如何?如果觉得提议还不错,那就立即动手吧! 一.需要的库 pygame tkint ...

  4. python制作pdf教程_学以致用:Python爬取廖大Python教程制作pdf!

    学以致用:Python爬取廖大Python教程制作pdf! python-tutorial-pdf 当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个 ...

  5. python可以plc编程_自己动手做一个PLC

    我们自己来做一个PLC(Programmable Logic Controller,即可编程逻辑控制器)怎么样?就像很多计算机专业的同学都自己写过最简单的操作系统一样,作为工控领域的软件人,怎么能不自 ...

  6. 如何用python制作三维动画_用Python制作3D动画

    很多小伙伴可能不知道,在3D动画甚至电影制作的过程中,Python也在其中扮演了很重要的角色呢! 比如皮克斯的动画片一般使用Maya软件制作,并且流程中使用到了大量的Maya Python插件. 另外 ...

  7. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(二)

    今天继续新的专题.主要讲解[利用PYTHON制作桌面版爬虫软件]下的如何实现界面功能(一).该讲主要包括以下三个内容:掌握如何编写主函数,运行界面. 了解pywin32模块. 如何用python识别Q ...

  8. 用python制作勒索病毒_用c写一个小勒索病毒(用B站来学习)

    前言: 这里是根据B站上的一个视频,看着教学写的,一下是我对代码的分块解析记录,方便想入门写病毒和反病毒小工具的人学习. 准备 vc++2013 b站学习视频 新建项目 我就是一开始新建项目都不清楚, ...

  9. python制作阴阳师脚本_利用python制作一个阴阳师小游戏

    利用python制作一个阴阳师小游戏 发布时间:2020-11-27 13:59:49 来源:亿速云 阅读:84 这期内容当中小编将会给大家带来有关利用python制作一个阴阳师小游戏,文章内容丰富且 ...

最新文章

  1. jQuery获取json数据
  2. React Native 环境搭建步骤
  3. 【学习笔记】类对象的内存释放
  4. C++ public、protected、private区别
  5. fzu 2154 YesOrNo
  6. 按功能而不是按层打包课程
  7. linux内存剩余量为什么这么少,为什么我的Linux系统中空闲内存如此之少?
  8. bootstrap 解决弹出窗口(modal) 常见问题
  9. 第九城市:比特币矿机共贡献大约693 PH/s的总算力
  10. Python查看本机所有联网应用程序信息
  11. 从零开始刷Leetcode——数组(31.33)
  12. Enterprise Library引起的A reference to 'System.Design' could not be added
  13. 智能优化算法:自私羊群优化算法-附代码
  14. IDEA SpringBoot多模块项目搭建详细过程(转)
  15. docker安装speedtest和宝塔面板
  16. C# 读取写入Json文件
  17. Hive性能调优之Mapper和Reducer
  18. 用跨进程子类化技术实现对其它进程消息的拦载
  19. ADO简介(未完成)
  20. firefox网页慢加载图片慢或加载不出来

热门文章

  1. ensp 防火墙 pat 映射
  2. 计算机二级office高级应用和上机指导,2019年9月全国计算机二级教程:MS Office高级应用上机指导...
  3. ArcGIS,CC(Smart3D),ENVI....工作中常用软件的汉化包都在这,随你下载
  4. 中医大计算机考试题目,中医大计算机复习题-20210319205538.docx-原创力文档
  5. 计算机网络协议指的是tcp ip协议吗,计算机除了有网络协议也就是TCP/IP协议以外,还有什么协议呢?...
  6. icloud连接服务器时出现问题_iphone8 icloud连接服务器时出现问题
  7. chrome谷歌翻译失效解决
  8. oracle 连接组件,[2021] node连接oracle数据库示例[使用oracle官方组件]
  9. 用vue+element-ui快速写一个注册登录页面
  10. 2022-2028年中国航空货运产业发展动态及竞争战略分析报告