python图片字符画教程_[简单易懂&密恐慎入]用Python制作字符画教程——把想说的话藏在图片里…

1.制作目标

给定一张原图片,编写程序,使用我们输入的字符,填充得到一张新的图片。具有表白、斗图、制作壁纸等多种用途。

*以下展示图片请下载原图后查看

ps.对密恐患者时效果拔群,请慎用!!!

2.制作环境

本教程为Windows环境下,使用Python 3.8.0,以及Pillow模块制作。

Pillow模块可以使用pip在线下载安装,优点是不需要选择版本,但容易因 络问题安装失败。也可在 页 https://pypi.org/project/Pillow/4.0.0/#files 选择合适版本下载后离线安装 ,优点是稳定,但下载速度比较慢。

3.制作原理

首先我们需要知道,图片是由像素点构成,每个像素点都有一个RGB(红绿蓝)值,记为(R,G,B)。我们对图片进行处理时实质是对像素点进行处理。像素可以看成是图片里连续排列且带颜色的小方格,密密麻麻的像素才构成了一张张多姿多彩的图片。

那么要制作字符画,最直接的方法是将像素直接转换成字符,然后再一张同样大小的画布上写下文字。如下图所示

通过这种方法,理论上只要倍数足够大,就可以看清图片上的文字,而又不破坏图片的清晰程度。但当将输出图片扩充得过大时,图片的占用的存储空间也会增大,发送接收耗时长,而且大部分软件都有图片大小限制吗,不适合作为表情包发送。

通过这一方法,可以控制输出图片的大小。因为舍弃了原图部分像素,会导致输出图片的精细程度稍微不如原图。通过测试,发现汉字字 取值为[画布扩展倍数]*[像素抽取间隔]+1,这意味着想达到字 为9时,如果不设置像素抽取间隔,则图片尺寸会放大8倍,而设置了像素抽取间隔为2后,只需扩大4倍,这样可以有效减少空间占用。最后,由于文字不同于像素,文字之间存在间隙,所以画布的背景颜色会体现出来。

以上为制作字符画的思路,接下来带来的是Python编程内容,有这方面能力的小伙伴们可以先尝试自行编程实现。

#首先要导入模块,这里只需导入PIL模块,这里我只需要PIL模块里的 Image, ImageDraw, ImageFont

from PIL import Image, ImageDraw, ImageFont

#创建几个变量保存图片名、填入字符、画布扩大倍数、像素点间隔

filename = “[图片名]”

s = “[填入的字符]”

step = [画布扩展倍数]

l = [像素间隔]

#将填入字符拆分开

t = list(s)

#设置画布的背景色(r,g,b)以及透明度(a),a=255时为不透明

r = 255

g = 255

b = 255

a = 255

#打开原图,获得全部像素点,读取图片得长宽。

simg = Image.open(filename)

simg_array = simg.load()

w,h = simg.size

#选择填充到画布上得字体以及字 ,字体可在C:WindowsFonts下找到,字 推荐设置为[画布扩展倍数]*[像素间隔] + 1

ttfont = ImageFont.truetype(“?C:\Windows\Fonts\simfang.ttf”,step*l + 1)

创建画布

timg = Image.new(‘RGBA’, (step*w, step*h), (r, g, b, a))

#进行绘制,读取原图像素,并在画布上使用对应颜色添加文字

draw = ImageDraw.Draw(timg)

start = 0

for i in range(0, h, l):

pos = start % len(t)

start += 1

for j in range(0, w, l):

draw.text((j*step,i*step), t[pos%len(t)], simg_array[j,i], font = ttfont)

pos += 1

#打开图片预览,并保存

timg.show()

timg.save(“result.png”)

5a6248719eab539b6cda4d7ca48f5a7b.png

以上为本教程全部内容,可执行程序正在制作中,各位有什么不懂得欢迎私聊。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览212702 人正在系统学习中 相关资源:revisionist:保守版本R软件包安装-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月6日
下一篇 2021年1月6日

相关推荐