Python图片转字符画

目录

一、思路

二、代码实现

三、代码解读


一、思路

1.导入图片(最好背景图为白色,效果最好),通过pillow包进行导入,如果没有pillow包,在pycharm中可通过file-settings-project-python interpreter-'+'搜索安装。

2.设置图片大小,通过resize方法改变图片大小

3.把图片转化成灰度图,这里通过像素点完成,每张图片都是由像素点构成。

4.把每个像素点的值改成字符

5.保存字符画

二、代码实现

from PIL import Image
char=list('QMWENBFQ#$OVC?7>!:-;. ')

def get_char(r,g,b,alpha=256):
    #如果透明度为0,输出空。
    if alpha==0:
        return ' '
    #透明度不为0,转化成灰度值grey(越浅灰度值越小->0,越深灰度值越大->255)
    grey=(2126*r+7152*g+722*b)/10000
    #(0,1)*长度19=(0,19)
    char_idx=int((grey / (alpha+1.0))*len(char))
    return char[char_idx]

def write_file(output_file,content):
    with open(output_file,'w') as f:
        f.write(content)

def main(file_name="input.jpg",width=100,height=80,output_file='output.txt'):
    #初始化
    text=''
    #导入图片
    img=Image.open(file_name)
    #改变尺寸
    img=img.resize((width,height),Image.NEAREST)
    #生成像素点,并且把每个像素点的rgb值取出(getpixel->(r,g,b))
    for h in range(height):
        for w in range(width):
            text += get_char(*img.getpixel((w,h)))
        text+='\n'
    print(text)
    write_file(output_file,text)

if __name__=='__main__':
    main('D:\\study\\pkq.jpg')

三、代码解读

1.导入pillow包,可简写为PIL。从PIL包中导入Image模块

2.设置之后把像素点改成字符时所用的字符,这里字符可以随便设

3.先看main()函数,程序的主体

第一步,使用img=Image.open(file_name)读取图片。

第二步,使用img=img.resize((width,height),Image.NEAREST)改变图片大小,在这里宽高设置为100和80,这里第二个参数Image.NEAREST是低质量缩放,默认也是这个,可以不用加

第三步,因为图片是一个数字二维矩阵,所以用两次循环取每个像素点的值。并且利用*img.getpixel((w,h))函数得到像素点的rgb值,通过自定义函数get_char得到的字符保存在text中,所以在此之前需要初始化text

第四步,打印字符text,并且用自定义函数write_file(output_file,text)保存

4.到这里看get_char自定义函数,已知在主函数中把每个像素点的rgb值作为参数传给get_char函数。进入函数,如果透明度为0时,说明这个像素点是白色背景,打印空格。如果不是则利用grey=(2126*r+7152*g+722*b)/10000,对像素点进行灰度转换,可以在网上查到。每一种颜色对应一个灰度值,通过char_idx=int((grey / (alpha+1.0))*len(char))得到每一种颜色对应的下标,再根据下标找到char中对应的字符,传给主函数

5.这里看write_file函数,该函数是把字符保存成txt文件。output_file是保存成txt的名字,对应主函数中的output.txt。with open(output_file,'w') as f是打开output.txt文件以写的方式,这个函数命名为f,f.write(content)写入传过来的text,这里的content

6.if __name__=='__main__':
    main('D:\\study\\pkq.jpg')

这里我传入的是一张皮卡丘的图片。

四、效果展示

原图

                                                                        字符画

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值