python字符画实现_Python实现图片转字符画

from PIL importImageimport argparse #用来管理命令行参数输入

"""字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能够表现一种颜色

字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

灰度值的概念:

指黑白图像中点的颜色深度,范围一般从0-255,白色为255,黑色为0,故黑白图片也称灰度图像。

RGB色彩的概念:

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间

叠加得到各种颜色。RGB代表红蓝绿三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色。

用灰度值公式将像素的RGB值映射到灰度值:

grey = 0.2126 * r + 0.7152 * g + 0.0722 *b

我们可以创建一个不重复的字符列表,灰度值小(黑)的用列表开头的符号,灰度值大(白)的用列表末尾的符号。"""

#首先,构建命令行输入参数处理 ArgumentParser 实例

parser =argparse.ArgumentParser()#定义输入文件 输出文件 输出字符画的宽和高

parser.add_argument('file') #输入文件

parser.add_argument('-o', '--output') #输出文件

parser.add_argument('--width', type=int, default=80) #输出字符串宽

parser.add_argument('--height', type=int, default=80) #输出字符串高

#解析并获取参数

args =parser.parse_args()#输入的图片文件路径

IMG =args.file#输出字符串的宽和高

WIDTH =args.width

HEIGHT=args.height#输出字符串的路径

OUTPUT =args.output#首先将RGB值转为灰度值,然后使用灰度值映射到字符列表中的某个字符。

#定义字符画使用的字符集

ascii_char = list(r"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")#RGB转字符的函数, 当alpho值为0表示图片中该位置为空白

def get_char(r, g, b, alpha=256):#判断alpha的值

if alpha ==0:return ''

#获取字符集的长度,这里为70

length =len(ascii_char)#将RGB值转为灰度值gray,灰度值范围为0-255

gray = int(0.2126 * r + 0.7152 * g + 0.0722 *b)#灰度值范围为0-255,而字符集只有70

#需要进行如下处理才能将灰度值映射到指定的字符上

unit = (256.0 + 1)/length#返回灰度值对应的字符

return ascii_char[int(gray/unit)]"""下面开始处理图片,图片处理步骤如下:

1:首先使用PIL的Image.open打开图片文件,获取对象im

2:使用PIL库的im.resize()调整图片大小对应到输出的字符画的宽度和高度

3:遍历提取图片中每行的像素的RGB值,调用ger_char转为对应的字符

4:将所有像素对应的字符拼成一个字符串txt

5:打印输出字符串txt

6:如果配置了输出文件,将打开文件将txt输出到文件,否则默认输出到output"""

if __name__ == '__main__':#打开并调整图片宽和高

im =Image.open(IMG)

im=im.resize((WIDTH, HEIGHT), Image.NEAREST)#初始化输出的字符从

txt = ''

#遍历图片的每一行

for i inrange(HEIGHT):#遍历图片的每一列

for j inrange(WIDTH):#将(j,i)坐标的RGB像素转为字符后添加到txt字符串

txt += get_char(*im.getpixel((j, i))) #getpixel获取的就是坐标上的r,g,b值

#遍历完一行需要增加换行符

txt += '\n'

#输出到屏幕

print(txt)#字符画输出到文件

ifOUTPUT:

with open(OUTPUT,'w') as f:

f.write(txt)else:

with open('output.txt', 'w') as f:

f.write(txt)"""在当前目录下打开命令行

输入python ascii.py t.jpg即可运行

t.jpg是测试的图片,可以换成其他图片"""

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值