Python写情书? 10行代码展示如何把情书写在她的照片里


Posted in Python onApril 21, 2022

1、引言

小屌丝:鱼哥,你说这就快到圣诞节了,我应该送女神什么礼物呢?

小鱼:你的女神又不缺什么礼物,倒不如送点惊喜?

小屌丝:送什么惊喜呢?

小鱼:不如,送一份情书?

小屌丝:鱼哥,你的意思,让我领着我女神去KTV里面唱歌?

小鱼:我没有那么肤浅,此情书,不是张学友的那首《情书》,也不是吉克隽逸的那首《三行情书》。

小屌丝:那是什么情书呢? 难道要我去复印社打印一份??

小鱼:也没那么low,

小屌丝:那你这是为难我了,

小鱼:如果把你的情书写在你女神的照片上,并打印出来送给她,她会不会感动??

小屌丝:我去~~ 情书还可以这么玩?

小鱼:那必须的。

小屌丝:鱼哥,那赶紧整啊,我已经…。

2、Pillow

今天我们来说的这个神器,就是Pillow。

利用的原理就是:把情书写在像素中。

把图片无限放大,就会看到一个小小的方格,这就是像素。

也就是说,图片是由无数个像素组成。

2.1 Pillow 安装

我们都知道,针对图片进行操作,就会用到Pillow这个库,因为Pillow 是个第三方库,所以,在使用前,我们要进行 安装。

老规矩, pip 方式安装:

pip install Pillow

2.2 Pillow 介绍

安装完成后,我们先来简单介绍几个常用示例

2.2.1 新建及保存图片

# -*- coding:utf-8 -*-
# @Time   : 2021-12-17
# @Author : carl_DJ

from PIL import Image

#创建一张新的图片:mode 为RGB,size :520x520 ,color :0,100,200
img = Image.new('RGB',(520,520),(0,100,200))

# 保存图片
img.save('img.jpg')

运行代码,可以看到,在默认路径自动创建一张img.jpg图片

Python写情书? 10行代码展示如何把情书写在她的照片里

我们打开图片,看看是啥样子的。

Python写情书? 10行代码展示如何把情书写在她的照片里

没错,就是这张图片。

2.2.2 重新绘制图片

我们在上面生成的图片中,画两条线

# -*- coding:utf-8 -*-
# @Time   : 2021-12-17
# @Author : carl_DJ

from PIL import Image,ImageDraw

#创建一张新的图片
#img = Image.new('RGB',(520,520),(0,100,200))
#img.save('img.jpg')

#直接打开生成的img.jpg图片
img = Image.open('img.jpg')

#取得绘图对象,需要绘制对角线
draw = ImageDraw.Draw(img)

#绘制对角线
draw.line((0,0,img.size[0],img.size[1]),fill = 128 ,width = 2)
draw.line((0,img.size[1],img.size[0],0),fill = 128 ,width = 2)
#保存图片
img.save('img-line.jpg')

运行代码后,我们打开生成的图片

Python写情书? 10行代码展示如何把情书写在她的照片里

奈斯,说明符合我们的预期。

2.2.3 图片合并

我们把两个图片合并。

# -*- coding:utf-8 -*-
# @Time   : 2021-12-17
# @Author : carl_DJ

from PIL import Image

#直接打开img.jpg图片
img = Image.open('img.jpg')

#创建一个小的图片
img_small = Image.new('RGB',(30,30),'yellow')

#把img_samll 黏贴在 img.jpg图片的 的20x20的位置
img.paste(img_small,(20,20))

#保存新生成的图片
img.save('img-paste.jpg')

运行代码,我们看下效果

Python写情书? 10行代码展示如何把情书写在她的照片里

完美。

2.3 实战

简单说一下我们的思路,大致分三步

1、先创建基本的信息:文案内容,像素尺寸,字体类型,图片路径;

2、创建小图来填充内容,在创建大图状态填充好的小图内容;

3、循环遍历图片的内个像素点,把文字黏贴上去。

我们先看下唐三的女神图片:

Python写情书? 10行代码展示如何把情书写在她的照片里

我们看下代码实现:

# -*- coding:utf-8 -*-
# @Time   : 2021-12-17
# @Author : carl_DJ

from  PIL import Image,ImageDraw,ImageFont

#像素放大尺寸
img_king_size = 20

#输入内容
text = '我想和你一起吹吹风'
#设置字体
font = ImageFont.truetype('simsun.ttc',img_king_size)

#图片路径
img_path = './king.jpg'

#打开图片
img = Image.open(img_path)
img_w,img_h = img.size

#创建一个小图,用于填充字体
img_child = Image.new("RGB", (img_king_size, img_king_size))
#创建一个大图,状态填充好的小图字体
img_ans = Image.new("RGB",(img_w * img_king_size,img_h * img_king_size))

#获取单个文字的宽和高
text_w,text_h = font.getsize('中')
#文字水平居中
offset_x = (img_king_size - text_w) >> 1
#文字垂直居中
offset_y = (img_king_size - text_h) >> 1

char_index = 0
#小图用于绘制文字
draw = ImageDraw.Draw(img_child)

#循环遍历原图的每一个像素点
for x in range(img_w):
    for y in range(img_h):
        #绘制背景,让图片更好看
        draw.rectangle((0,0,img_king_size,img_king_size),fill = 'lightgray')
        #用(x,y)处的像素点的色值进行绘制字体
        draw.text((offset_x,offset_y),text[char_index],font = font,fill = img.getpixel((x,y)))
        img_ans.paste(img_child,(x * img_king_size,y * img_king_size))
        char_index = (char_index + 1) % len(text)

img_ans.save('king-letter.jpg')

我们看下效果图

Python写情书? 10行代码展示如何把情书写在她的照片里

由于生成图片的大小,超过上传最大限制,所以,不能上传原图,

我就截取一下,看看效果:

Python写情书? 10行代码展示如何把情书写在她的照片里

我再给放大N倍,

Python写情书? 10行代码展示如何把情书写在她的照片里

都说看不清效果,那我只能放大N倍。


Tags in this post...

Python 相关文章推荐
Python复制目录结构脚本代码分享
Mar 06 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
python实现textrank关键词提取
Jun 22 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
python实现两个字典合并,两个list合并
Dec 02 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 Python
微信小程序调用python模型
Apr 21 #Python
使用python绘制分组对比柱状图
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 #Python
Python尝试实现蒙特卡罗模拟期权定价
Python matplotlib绘制条形统计图 处理多个实验多组观测值
python绘制简单直方图(质量分布图)的方法
Python绘制散乱的点构成的图的方法
You might like
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
php自定义错误处理用法实例
2015/03/20 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
详解angular element()方法使用
2017/04/08 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python实现京东秒杀功能
2018/07/30 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
制衣厂各岗位职责
2013/12/02 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
js中Object.create实例用法详解
2021/10/05 Javascript