每天学习一点新知识(二)——用文字来构成一张图片

每天学习一点新知识(二)——用文字来构成一张图片

因为疫情的原因,明明已经到了武汉樱花开放的季节,却无法前去观赏,于是前些天一位武大学生用Python敲出了一朵樱花的延时开放。于是我就想,我可不可以也尝试着去做一下。
为了循序渐进,本篇博客先对图片进行处理,之后会另写一篇对视频处理的。
那么下面我们就正式开始吧。

准备工作

PyCharm,以及一些相应的库(稍后到代码中会详细介绍)
一张图片

先从图片开始

首先看需要导入一些需要的库
import os
from PIL import Image, ImageFont, ImageDraw

介绍一下这些库:
os库是一个Python内置库,是用来进行对文件、目录的处理,它可以使我们的程序与平台无关,可移植性较好。
PIL库是用来进行图像处理的库,它可以将图片读为类,非常简单方便地对图形进行处理。需要注意的是,安装的命令是pip install pillow

然后是读取图片
#str_out是我们打算将图片用什么文字填满
str_out = '武汉加油'
#imin是获取的我们将要处理的图片,height和width分别为图片的高和宽
imin = Image.open("./图片.jpg","r")
height = imin.height
width = imin.width
#获取字体,填充的文字用什么字体显示,可根据个人喜好改变
#三个变量分别问字体文件,字体大小,字体编码方式
font=ImageFont.truetype("./方正隶书简.TTF", 6, encoding="unic")
#获得字体的宽和高
font_w,font_h=font.getsize(str_out[0])
#设置输出图片的颜色通道、大小及底色
imout = Image.new("RGB",(imin.width,imin.height),'black')
下面开始对图片进行处理
colors = []
k = 0
#按字体大小,逐像素替换为对应颜色的文字
for i in range(0, imin.height, font_h):
	color = []
	for j in range(0, imin.width, font_w):
    	pixel = imin.getpixel((j,i))#得到每个像素的坐标
		color.append((pixel[0],pixel[1],pixel[2]))#记录像素颜色信息
	colors.append(color)#将每个像素的颜色信息存储到colors种
draw = ImageDraw.Draw(imout)#创建Draw对象以对imout进行操作
for i in range(0, imin.height, font_h):
	k = 0
	for j in range(0, imin.width, font_w):
		#逐个将图片中的各像素用文字替代
		draw.text([j, i],str_out[k],colors[i // font_h][j // font_w], font)
		k += 1
		k %= len(str_out)
#输出图片
imout.save("图片.png", encoding='utf-8')

以上就是输出一张由文字构成的图片的全部代码了,是不是很简单呢。相信稍微有点Python基础的人都不难理解。
下面向大家展示一下效果

效果展示

原图片:在这里插入图片描述
输出图片:
在这里插入图片描述
怎么样,是不是很不错呢?
图片中文字的内容以及字体样式、大小等大家都可以自行调整哦。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值