Python图片画字符图~

背景

前阵子网上看到有人发了一幅字符画,下面评论哇塞高手!…这得花多少时间才能画出来!…这怎么画的…各种评论。心想,不就是把像素换成字符吗。。。。那就看看怎么画!

一、思路

一张图片要变成一个字符图片,可以想想其实就是把图片的每一个像素换成相应的字符,而每一个像素不都是由颜色来构成的吗,具体点说它是一个rbg值。那我们只要每个不一样的rbg值换成字符不就可以了!但是将像素换成字符不太可能,也破环了图片本身,那么我们根据遍历的rbg值画一个字符图片 不就可以了!思路总结:
打开图片->遍历出所有像素的rbg值->根据rbg值写入字符。

二、实现

根据思路,一个rbg对应一个字符,rbg值实在有太多了,我们似乎不能把所有字符跟rbg对应上,可以说,用的字符越多,就越能画出接近原图片的字符画,但是实现起来比较困难,我们就用一些字符实现吧。
1.打开图片
这里使用PILLOW库

from PIL import Image

a = Image.open(r'D:\S\charpic\timg.jpg').resize((69,40))    #打开图片并且设置图片大小,两个参数代表宽度和高度,

2.遍历出所有rbg值:

from PIL import Image

a = Image.open(r'D:\S\charpic\timg.jpg').resize((69,40))    #打开图片并且设置图片大小,两个参数代表宽度和高度,


for i in range(40):       #高度
    for j in range(69):   #宽度
        print(a.getpixel((j,i)))  #getpixel((x,y))函数返回一个图片像素值的(r,g,b)元组

打印出来效果:
在这里插入图片描述

3.根据rbg值写入字符

from PIL import Image

char =r"*&B+8&W-#oahkb+pqwmZO0QLCJUYXzcvunxrjf /\|()1{}[]?- +~<>i!lI;:,\"^`'.." #字符画用到的字符
a = Image.open(r'D:\S\charpic\timg.jpg').resize((69,40))    #打开图片并且设置图片大小,两个参数代表宽度和高度,
charpict = ''           #定义字符画

def change(tp):         #这个是画画的核心方法,用什么字符画由这个决定
    r = tp[0]
    g = tp[1]
    b = tp[2]
    a = int((r+g+b)/15)    #当分子越小,代表用的字符越多,画起来越接近原图,但分子越小,char字符串也要越多
    return char[a]   #理论上来说,当a是r+g+b时,代表需要r+g+b种字符来画画,也是还原原图的字符画.

for i in range(40):       #高度
    for j in range(69):   #宽度
        charpict = charpict + change(a.getpixel((j,i)))  #这里开始画画,按照每个元素来画,getpixel((x,y))函数返回一个图片像素值的(r,g,b)元组
    charpict = charpict + '\n'  #画一行就换行

print(charpict)

#保存到txt
c = open(r'D:\S\charpic\2.txt','w')
c.write(charpict)
c.close()

看到这里不懂的就看代码注释哦,注释都有解释。
(小提示:因为很难使用更多字符,那么我们可以根据输出的效果来调整符号位置,让图片画出来更加好看)

效果:
在这里插入图片描述

结束

好啦~现在就可以自己画字符画让人家觉得厉害了哈哈哈,其实用python实现起来也很简单!那么我们就画到这里咯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值