520使用Python实现“我爱你”表白


Posted in Python onMay 20, 2020

摘要: 每到情人节、七夕节,不少小伙伴大伙伴们都会遇到这样一个世纪问题——怎么给女朋友/老婆一个与众不同的节日惊喜。今天给大家分享一个独特的表白方法——用“我爱你”拼出心爱人的模样!

每到情人节、七夕节,不少小伙伴大伙伴们都会遇到这样一个世纪问题——怎么给女朋友/老婆一个与众不同的节日惊喜。

你说送花吧,到时候朋友圈里一划,全部都是送花的,女票:“没创意!”,遂卒;

你说送礼物吧,要是送的礼物不合心意,女票:“你根本不懂我!”,又卒;

你说逛街买买买吧,摸摸空空的口袋,默默把这个想法丢到一边...

今天,就和大家分享一个独特的表白方法——用“我爱你”拼出心爱人的模样!

520使用Python实现“我爱你”表白

成品图!

520使用Python实现“我爱你”表白

什么?看不清长啥样?放大来康康

520使用Python实现“我爱你”表白

想做出这样的照片吗?那么~我们现在就开始啦~

一. 需要准备的有

女票超级无敌可爱美腻的照片 1张!

python (这里用的是python3.7)

需要的用到的库

cv2:用来读取照片

PIL:用来生成新的图片

性能比较OK的电脑

(如果没有接触过python,不想/不会配环境、装cv2、PIL之类的库,或者电脑性能不太够,强烈推荐使用华为云的ModelArts进行开发~直接解决环境配置、电脑性能的各种问题~)

二. 基本思路
要实现这样的效果,首先需要有一张照片,提取其像素信息,然后赋给排布满文字的新图片,就能得到如上图所示的一张新图片啦!

废话不多说,接下来就开始吧~

三.操作流程

1.首先导入用到的库(两者的作用在1中已有介绍)

from PIL import Image, ImageDraw, ImageFont

2.然后开始声明绘图的方法

这里有两个参数,分别是原图片的路径和要写的文字

def draw(pic, draw_text):

3.接着读取图片

使用cv2中的imread方法读取图片信息,

使用PIL中的Image方法创建一个新的图片,其尺寸和源图片一致,背景为白色

blank = Image.new("RGB", [img.shape[1], img.shape[0]], "white")
drawObj = ImageDraw.Draw(blank) # 告诉程序,我们接下来就要在这个图上写字啦!

4.声明绘图的一些参数(这些参数都是我经过多次试验得到的最佳大小~)

m = 9 # 字体的大小
font_path = '你使用字体的位置' # 字体的路径
font = ImageFont.truetype(font_path, size=m) # 将字体信息赋给font变量,供后续使用

5.接下来就是最关键的一步!把文字写上去,并按照源图片给图片上色

通过两个for循环,依次定位到每个文字所在的色块(中间间隔n是因为文字比像素块大得多,不可能完全按照每个像素的位置和色彩来排布)

使用text()方法填入带色彩的文字,几个参数分别代表:

[j, i] -- 坐标位置

draw_text[int(j / n) % len(draw_text)] -- 找到当前该写入哪个文字了(比如“我爱你”中的第几个字)

fill=(img[i][j][2], img[i][j][1], img[i][j][0]) -- 代表源图片对应位置的颜色(三个分别代表RBG颜色值)

for i in range(0, img.shape[0], n):
for j in range(0, img.shape[1], n):
drawObj.text(
[j, i],
draw_text[int(j / n) % len(draw_text)],
fill=(img[i][j][2], img[i][j][1], img[i][j][0]),
font=font
) # 按句子的顺序填充文字

6.写入完成,导出图片

7.调用我们封装好的方法~

输入图片路径和目标文字,运行~一张独一无二的表白图就大功告成!

draw('1.jpg', "我爱你")

附上全代码(记得把字体路径改成自己电脑的哟~)

from PIL
import Image, ImageDraw, ImageFont
def draw(pic, draw_text):
	img = cv2.imread(pic)
blank = Image.new("RGB", [img.shape[1],
	img.shape[0]
], "white")
drawObj = ImageDraw.Draw(blank)
n = 10
m = 9
font = ImageFont.truetype(font_path,
	size = m)
for i in range(0, img.shape[0], n):
	for j in range(0, img.shape[1], n):
	drawObj.text(
		[j, i],
		draw_text[int(j / n) % len(draw_text)],
		fill = (img[i][j][2], img[i][j][1],
			img[i][j][0]),
		font = font
	)
blank.save('img_' + pic)
draw('1.jpg', "我爱你")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单解决Python文件中文编码问题
Nov 22 Python
深入理解python中的atexit模块
Mar 07 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
python编写计算器功能
Oct 25 Python
wxPython实现列表增删改查功能
Nov 19 Python
call在Python中改进数列的实例讲解
Dec 09 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
Python中tqdm的使用和例子
Sep 23 Python
django 外键创建注意事项说明
May 20 #Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 #Python
Python使用Paramiko控制liunx第三方库
May 20 #Python
解决django框架model中外键不落实到数据库问题
May 20 #Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 #Python
让Django的BooleanField支持字符串形式的输入方式
May 20 #Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 #Python
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
浅谈PHP中output_buffering
2015/07/13 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
单身旅行者的单身假期:Just You
2018/04/08 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
医院竞聘演讲稿
2014/05/16 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python