记python实现字符画生成的学习过程

思路

逐行扫描图片的像素点 获取RGB参数 转换为灰度值 根据灰度值 转换为字符 

需要用到的库

PIL的image模块  命令行解析库 argparse

先完成get_ascii的操作,即将RGB值转换为灰度值再根据获取到的灰度值取得字符列表中对应的列表

代码如下


写的时候,我发现unit的值是个浮点数,而我们需要整形数值,于是对unit进行整形变换就OK了

下一步需要写主函数的内容,这里需要的注意的是,python程序是脚本语言,没有固定的入口,不像其它变成语言那样,会编译成二进制再运行,而是会逐行运行,所以没有固定的入口。

所以,想要让程序再被调用的时候,而不是作为模块调用的时候执行我们想要的代码

那么需要写

if __name__ == '__main__‘:

即可实现

下面就需要读图片,为了使最后生成的字符画能够完整的显示出来,还需要调整大小,具体代码如下


这里需要注意的是,PIL库中的Image类中的resize接受一个元组,还可以加参数调整图片的质量

Image.NEAREST低质量
Image.BILINEAR双线性
Image.BICUBIC 三次样条插值
Image.ANTIALIAS

高质量   

若不添加,图片质量默认为NEAREAST

接下来就是执行逐行扫描了,将获取到的RGB值转换为灰度值 从而替换为字符串形成字符画,代码如下


这里需要注意的是,getpixel函数接受的是一个元组。

然后就需要输出文件啦,利用with..as..

with as相比常规获取文件句柄打开文件然后关闭文件句柄的操作来说,代码简洁,不易出错,可以处理异常

with as语句with后面跟的语句必须有一个__enter__()方法与__exit__()方法,恰好文件句柄操作就拥有这两个特性

with 会将紧跟其后的语句进行求值,将__enter__()方法返回的值赋给as后面的变量,with后面的代码块都被执行完毕之后,就会进行__exit__()方法的执行。


下面就是命令行解析库argparse的应用

使用argparse前需要初始化

parser = argparse.ArgumentParser()即完成初始化

对parse对象进行操作

parser.add_argument()添加命令行参数,参数一般为需要用户输入的参量,参量的默认类型,参量的默认取值。

不加-添加参量即为必选参量,添加-为参量缩写 类似-h的应用,添加--为可选参量,一般这样的参量后都有默认值

设置好参数后,还要将parser.parse_args()返回的对象赋给变量,以便将获取到的值赋给我们定义的变量。

至此,一个可供用户操作的输出字符画的程序就完成了




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值