Python——图片转化为字符画

字符画:

                字符画就是一系列字符的组成,我们可以将一个个字符看做为一个个像素(当然字符与像素之间的对应关系就不一定是单纯的一对一关系了,可以是多对一,也可以是一对多的关系,这个就需要看字符的数量了)字符的种类越多,图片的层次感越强,也就越接近真实图片。

                因为最终显示的黑白图片,所以首先要考虑的是将彩色图片转换为灰度值图像(灰度值是指黑白图像中点的颜色深度,范围一般在0-255之间,白色为255,黑色为0,黑白图片也成灰度图像。)在这里可以直接使用公式即可0.2126*r+0.7152*g+0.0722*b,然后再将灰度值与字符对应起来。

代码部分:

1.定义函数,功能为:将彩色图片中像素点的r,g,b转换为灰度值,继而转换为字符


def getchar(r,g,b):
    #定义映射字符
    #list函数可以将字符串转换成列表
    txt=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")
    #获取灰度值,映射字符
    gray = 0.2126 * r + 0.7152 * g + 0.0722 * b  # 把rgb图像化为灰度图
    #比例
    bili=256/len(txt)
    index=int (gray/bili)
    return txt[index]

2.打开一张图片,定义字符画的宽高

image=Image.open("wy1.jpg")
#设置宽高
width=200
height=150
#定义大小
image=image.resize((width,height),Image.NEAREST)

3.通过遍历整幅彩色图片的像素值,获得转换后的字符

for y in range(height):
    for x in range(width):
        #获取彩色图片的像素getpixel(x,y),并赋值给pix,此时pix是一个元组
        pix=image.getpixel((x,y))
        #将pix元组中的像素值获取出来,变成r,g,b的三个数值,然后传给getchar函数,转换出相应的字符
        txt+=getchar(*pix)
    txt+="\n"

4,最后存储就可以了。

完整代码如下:

# 思路:获取图片,获取图片的每一个像素,每个像素都是由rgb组成的,我们可以将彩色的图片转化为灰度图(得到灰度值)
# 再将相应的灰度值对比到相应的字符数据中,将每个字符按照顺序进行存储
import Image

def getchar(r,g,b):
    #定义映射字符
    #list函数可以将字符串转换成列表
    txt=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")
    #获取灰度值,映射字符
    gray = 0.2126 * r + 0.7152 * g + 0.0722 * b  # 把rgb图像化为灰度图
    #比例
    bili=256/len(txt)
    index=int (gray/bili)
    return txt[index]



image=Image.open("wy1.jpg")
#设置宽高
width=200
height=150
#定义大小
image=image.resize((width,height),Image.NEAREST)
#定义存储数据的变量
txt=""
#进行像素的遍历和提取
#
for y in range(height):
    for x in range(width):
        #获取彩色图片的像素getpixel(x,y),并赋值给pix,此时pix是一个元组
        pix=image.getpixel((x,y))
        #将pix元组中的像素值获取出来,变成r,g,b的三个数值,然后传给getchar函数,转换出相应的字符
        txt+=getchar(*pix)
    txt+="\n"
with open("wy1.txt","w",encoding="utf-8")as file:
    file.write(txt)
    file.close()

运行结果如下:

原图片:

字符画

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值