python 图片转字符画 这么简单几行代码确定不Get一下?

依稀还记得当初上C语言课,老师把一张企鹅的动漫形象通过C语言变成字符画,好神奇,而后又接触了python,接触了PIL库,发现用Python的话,也不难誒。来,走起!!

原图

在这里插入图片描述

效果(局部

在这里插入图片描述

  • 首先,得有PIL库,没有的话,去csdn其它优秀博主那蹭蹭,蹭蹭后记得进去,按步骤来。

  • 然后,还需要一张想要搞的图片,什么图都可以啦,(小yellow 图的话就自个弄弄,不要放出来)

  • 最后,就是配上几段简单的代码,那就走着!

既然是字符画,怎么能没有没有字符串!

先弄一个字符串,建议按“浓密”程度手动排序,比如:
chrs = '@&$#%QPBMFHjlcvtuoi1+=-'
allc = len(chrs)#顺便统计一下个数呗
要用的图片路径得有一个吧,输出路径得 有一个吧
img_path = r'c:\laal\beyond.jpg'
out_path = r'c:\laal\beyond_chrp.txt'
要弄字符画,得把像素与字符建立起来映射(说白了就是一对一的关系),但是,要是彩色(RGB之类的都够呛)的话,那还真不像标题那么容易了,字符画,字符写出来,黑色的对吧(彩色的也有,但黑白更显表格), 那吧图片转成黑白的不就完啦???哈哈哈
img = Image.open(img_path).convert('L')
黑色的字符有了,黑白的图片有了,那然后呢????然后,然后建立对应关系呗,
  • 字符总数为 allc(之前算了
  • 然而黑白图的灰度【设为gray】(理解为颜色深浅程度就好)是0-255总共256个值
  • 那就分一下好了,每个字符负责一个灰度区间好了,区间长度如下:
per_span = 256/allc
如此,假设某一像素点灰度值为gray,那么它对应的字符在字符串中的索引位置就应该是 index = int(gray/per_span),到这里,应该就可以明白为什么当初凑字符串的时候,建议按照“稠密”来排序了【灰度0-255 有黑到白】
那么接下来的事还不是行云流水吗,
读取图片并转换为黑白图
逐行读取图片并同时将像素点通过映射转换为字符(一行像素一行字符串)
将每一行像素映射的字符串存储起来
完事!

那接着就来呗,弄一个转换函数,输入图片,返回映射后的字符画

def transfrom(img):
	chrs = '@&$#%QPBMFHjlcvtuoi1+=-'
	allc = len(chrs)#顺便统计一下个数呗
    img = img.convert('L')
    chrpic = ''#存储字符画
    for y in range(img.size[1]):
        for x in range(img.size[0]):
            gray = img.getpixel((x, y))#获取图片坐标为x,y点的灰度值
            chrpic += (chrs[int(gray//per_span)])#通过对应关系把灰度转换为字符
        chrpic += '\n'#存完一行像素的映射后,记得换个行
    return chrpic

大头到这就没了,最后收一下尾,写个所谓的主函数,就成了 它!

def main():
	img_path = r'c:\laal\beyond.jpg'
	out_path = r'c:\laal\beyond_chrp.jpg'
    img = Image.open(img_path)
    # 下边是存储的部分
    if not op.exists(out_path):
        f = open(out_path, 'a')
        f.close()
    with open(out_path, 'w') as f:
        f.write(transfrom(img))
        f.close()

完事了,打开看一波呗

要是遇到如下状况,不要急着先怀疑人生,还有问候我,调一下字体,亲!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

干货!Windows频幕二维码识别小工具

python 图片拼接、图片转pdf

python 精美壁纸、简单爬虫,告别壁纸荒

Python 图片拼心,表白利器

Python 以字成图,花式表白,脱单趁早

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的壳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值