Python 50行代码实现图片转字符画

前几天在网上看到Python图片转字符画的教程,现在我也来分享一下,毕竟好玩的要一起玩才有意思嘛

一、工具库

  • pillow 库

二、实验原理

字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色(暂且这么理解吧),字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

问题来了,我们是要转换一张彩色的图片,这么这么多的颜色,要怎么对应到单色的字符画上去?这里就要介绍灰度值的概念了。

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像

我们可以使用灰度值公式将像素的 RGB 值映射到灰度值:

gray = 0.2126 * r + 0.7152 * g + 0.0722 * b

这样就好办了,我们可以创建一个不重复的字符列表,灰度值小(暗)的用列表开头的符号,灰度值大(亮)的用列表末尾的符号。

三、实验步骤

  1. 安装pillow

    pip install pillow

  2. 准备一张图片

  3. 代码

from PIL import Image

codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''  # 生成字符画所需的字符集
count = len(codeLib)

def transform1(image_file):
    image_file = image_file.convert("L")  # 转换为黑白图片,参数"L"表示黑白模式
    codePic = ''
    for h in range(0, image_file.size[1]):  # size属性表示图片的分率,'0'为横向大小,'1'为纵向
        for w in range(0, image_file.size[0]):
            gray = image_file.getpixel((w, h))  # 返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组
            codePic = codePic + codeLib[int(((count - 1) * gray) / 256)]  # 建立灰度与字符集的映射
        codePic = codePic + '\r\n'
    return codePic


fp = open(u'blue_cat.jpg', 'rb')
image_file = Image.open(fp)
image_file = image_file.resize((int(image_file.size[0] * 0.75), int(image_file.size[1] * 0.5)))  # 调整图片大小
print(u'Info:', image_file.size[0], ' ', image_file.size[1], ' ', count)

tmp = open('pa.txt', 'w')
tmp.write(transform1(image_file))
tmp.close()

原图:


蓝胖子:)

转换为字符画(注:在记事本打开时记得取消自动换行,下图字体:宋体 字号:小六)


灰胖子(:

最后

欢迎关注公众号“Python绿洲
个人博客站点: https://www.donlex.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近在寻找python练手的项目,加深语法的熟练程度知乎一个回答给出的项目很合适,以下为该项目的学习笔记。 项目链...
    _Left阅读 3,558评论 0 0
  • 本篇博客改编自实验楼 通过本篇博客,你可以将你喜欢的任意图片转换成对应的字符画 最终效果 原理介绍 字符画是一系列...
    teaGod阅读 14,283评论 1 9
  • 本文转自 python数字图像处理 基于python脚本语言开发的数字图片处理包,比如PIL,Pillow, op...
    jiandanjinxin阅读 147,769评论 8 89
  • 一早醒来,一边补看春晚能看的节目,一边在床上把女儿“修理”了一顿,从揉头皮到按捏背部,到敲腿,到拧臂——她痛...
    幽篁独坐阅读 207评论 0 1
  • 姓名:邓平云 深圳蔚蓝时代商业管理有限公司南京分公司 【日精进打卡第54天】 【知~学习】 《六项精进大纲 》1遍...
    邓平云阅读 146评论 0 0